如何在类外重载一元运算符`&`?

3
您可以在类内部重载一元 & 运算符,示例如下:
struct X
{
   void* operator &()
   {
      return this;
   }
};

如果要在类外重载一个函数,使其返回地址。该怎么做:

struct X
{
};

void* operator &(const X& x)
{
    //how?
}

获取参数的地址会导致无限递归。

为什么要重载运算符以返回对象的地址?它已经可以做到这一点了。 - Bo Persson
@BoPersson 当然是为了好玩 :) - AMCoder
1个回答

5
在C++11中,有template< class T > T* std::addressof(T& arg)std::addressof 你也可以从Boost Utility获取相同的C++03函数。

我猜这里的意思是,addressof 会生成调用同一运算符的递归代码吗? - Luchian Grigore
不行,因为在获取地址之前,addressof 内部会先将其转换为 char& - gwiazdorrr
对的,addressof 会代表你执行“丑陋的强制转换技巧,以避免调用重载的 operator&()”。 - James Brock
1
由于它现在是C++11标准的一部分,根据定义,它是合法的。 - James Brock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接