提问人:Luchian Grigore 提问时间:10/22/2012 最后编辑:Matthieu M.Luchian Grigore 更新时间:10/22/2012 访问量:389
哪些特殊规则适用于一元和运算符?
What special rules apply to unary & operator?
问:
是否有任何特殊规则适用于一元和运算符?
例如,代码:
#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
答:
14赞
ForEveR
10/22/2012
#1
n3337 13.3.1.2/9
如果运算符是运算符 ,、一元运算符 & 或运算符 ->,并且没有可行的函数, 则假定该算子是内置算子,并根据第 5 条进行解释。
评论
0赞
WhozCraig
10/22/2012
我完全同意这个答案。可行性是问题所在,我相信它受运算符的隐式对象参数的约束,并在稍后的 13.3.1 中介绍。(4-5). 完全正确的答案,先生。+1!
上一个:在 C++ 中调用私有方法
下一个:通过反射获取第一个父级的字段
评论
&
std::addressof
boost::addressof
operator&
&
operator&