是否有任何特殊规则适用于一元&操作
例如,代码:
#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
对象上调用我的重载操作符,因为我已经知道了这一点。
答案 0 :(得分:14)
n3337 13.3.1.2/9
如果运营商是运营商,一元运营商&amp; ,或运营商 - &gt;,并且没有可行的功能, 然后假定操作符是内置操作符并根据第5章进行解释。