Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何超载一元&一元;课外活动?_C++_Operator Overloading - Fatal编程技术网

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当然是为了好玩:)