什么特殊规则适用于一元&运营商?

时间:2012-10-22 08:05:21

标签: c++ operator-overloading

是否有任何特殊规则适用于一元&操作

例如,代码:

#include <iostream>
struct X
{
    X() {}
    void* operator &() { return NULL; }
};
int main()
{
    const X x;
    std::cout << &x << std::endl;
    X y;
    std::cout << &y;
}

产生输出

0xbfbccb33
0

我知道这会像这样编译和运行,因为之前我曾在这里进行过讨论,但我不知道这一点,我原本以为无法编译,因为operator &未被声明const

因此,无论operator &() const是否过载,编译器都会生成operator &()。很好,这很有意义,尤其是样本和输出。

问题是标准中详述的此行为在哪里?

我不是在寻找重复我在问题中已经说过的内容的答案,所以请不要解释如何在const对象上调用我的重载操作符,因为我已经知道了这一点。

1 个答案:

答案 0 :(得分:14)

n3337 13.3.1.2/9

如果运营商是运营商,一元运营商&amp; ,或运营商 - &gt;,并且没有可行的功能, 然后假定操作符是内置操作符并根据第5章进行解释。