20

是否有适用于一元 & 运算符的特殊规则?

例如,代码:

#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对象上调用,因为我已经知道了。

4

1 回答 1

14

n3337 13.3.1.2/9

如果运算符是运算符 ,、一元运算符 &或运算符 ->,并且没有可行的函数,则假定运算符是内置运算符并根据第 5 条进行解释。

于 2012-10-22T08:22:30.520 回答