C++ 如何超载一元&一元;课外活动?
您可以在类中重载一元C++ 如何超载一元&一元;课外活动?,c++,operator-overloading,C++,Operator Overloading,您可以在类中重载一元&运算符,如下所示: struct X { void* operator &() { return this; } }; 这样它就会返回一个地址。如何在类之外重载它: struct X { }; void* operator &(const X& x) { //how? } 获取参数的地址将导致无限递归。在C++11中,有模板T*std::addressof(T&arg) 您也可以从这里猜得到C++03的相
&
运算符,如下所示:
struct X
{
void* operator &()
{
return this;
}
};
这样它就会返回一个地址。如何在类之外重载它:
struct X
{
};
void* operator &(const X& x)
{
//how?
}
获取参数的地址将导致无限递归。在C++11中,有
模板T*std::addressof(T&arg)
您也可以从这里猜得到C++03的相同函数,但addressof不会生成递归调用同一运算符的代码吗?不会,因为在获取地址之前,
addressof
内部强制转换为char&对,addressof
代表您执行“避免调用重载的运算符(&()
)的难看的强制转换技巧”因为它现在是C++11标准的一部分,根据定义,它是合法的。为什么要重载运算符以返回对象的地址?它已经这样做了。@Boperson当然是为了好玩:)