是否有适用于一元 & 运算符的特殊规则?
例如,代码:
#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
对象上调用,因为我已经知道了。