[over.unary]/2中注释中提到的隐藏编译示例

Joã*_*nso 9 c++ operator-overloading language-lawyer

[over.unary]/2

同一运算符的一元和二元形式被认为具有相同的名称.[注意:因此,一元运算符可以隐藏二进制运算符与封闭范围,反之亦然. - 尾注]

我想看一个隐藏发生的片段的编译示例.

Sto*_*ica 11

一个相当简单的例子1:

struct foo {
    void operator+(foo const&) {}
};

struct bar : foo {
    void operator+() {}
};

int main() {
    bar a, b;
    a + b; // Can't add two bars
}
Run Code Online (Sandbox Code Playgroud)

成员函数的名称是operator+,所以声明的bar那个在foo我们重载它时会隐藏它.这使得在main形成不良的情况下加入.

但是如果你有两个foo对象(不是bar),那么添加就完全可以了.


1 - 请原谅我这是一个非编译的,但通常隐藏名称的问题是它会阻止程序突然建立.