2011-06-27 26 views
13

可能重复:
What legitimate reasons exist to overload the unary operator& ?为什么任何人想要超载&(address-of)运算符?

我刚才读this question,我不禁纳闷:

为什么会有人能够想到超载&(”地址 - “)运营商?

 
    some_class* operator&() const { return address_of_object; } 

是否有任何合法用例?

+0

@Matti:我们可以标记为合并。这比复制答案和问题要好。 –

+0

@Tomalak:哇。我不知道这是可能的。 –

+0

@Matti:我不是100%确信它是,但我听说过谣言...... :) –

回答

18

如果您正在处理任何类型的包装对象,您可能需要或需要将包装的访问透明地转发给包含的对象。在这种情况下,你不能返回一个指向包装器的指针,但需要重载地址 - 运算符来返回指向包含对象的指针。

+0

嘿,我搜索了“C++重载地址”,确切地说我是否可以做到这一点。感谢极其快速的保证:-) –

6

因为他们是邪恶的,希望你受苦。

或者我猜如果你使用代理对象?我想假设你可能想要返回一个指向托管对象而不是容器的指针 - 虽然我宁愿用getter函数来做。否则,你必须记住使用诸如boost::addressof之类的东西。

+0

我想代理对象的一点是,你不知道它在那里。 (或者你的行为就像你不知道的那样)。特别是,你不知道它的地址。无论如何,这通常是暂时的。 – curiousguy

7

是的,对于调试(如果您想跟踪任何访问或引用,您可能需要在对&,*->的任何调用中插入一条日志行)。

0

我已经看到这在生产性的代码已经。

但是,在那里,返回了struct的内容的二进制表示,而不仅仅是0

而且用例很简单:二进制操作。

+2

带一元'&'的二元运算? –

+0

我会看看如果我再次找到代码,那么我会发布一个例子。听起来很奇怪,看起来很有趣(我觉得很丑),但也许作者认为它更好使用'&'两次;) –

+0

因为它为什么要做一些有意义的事情,当你可以做时...... _that_。 :/ –