可能重复:
What legitimate reasons exist to overload the unary operator& ?为什么任何人想要超载&(address-of)运算符?
我刚才读this question,我不禁纳闷:
为什么会有人能够想到超载&
(”地址 - “)运营商?
some_class* operator&() const { return address_of_object; }
是否有任何合法用例?
可能重复:
What legitimate reasons exist to overload the unary operator& ?为什么任何人想要超载&(address-of)运算符?
我刚才读this question,我不禁纳闷:
为什么会有人能够想到超载&
(”地址 - “)运营商?
some_class* operator&() const { return address_of_object; }
是否有任何合法用例?
如果您正在处理任何类型的包装对象,您可能需要或需要将包装的访问透明地转发给包含的对象。在这种情况下,你不能返回一个指向包装器的指针,但需要重载地址 - 运算符来返回指向包含对象的指针。
嘿,我搜索了“C++重载地址”,确切地说我是否可以做到这一点。感谢极其快速的保证:-) –
因为他们是邪恶的,希望你受苦。
或者我猜如果你使用代理对象?我想假设你可能想要返回一个指向托管对象而不是容器的指针 - 虽然我宁愿用getter函数来做。否则,你必须记住使用诸如boost::addressof
之类的东西。
我想代理对象的一点是,你不知道它在那里。 (或者你的行为就像你不知道的那样)。特别是,你不知道它的地址。无论如何,这通常是暂时的。 – curiousguy
是的,对于调试(如果您想跟踪任何访问或引用,您可能需要在对&
,*
或->
的任何调用中插入一条日志行)。
我已经看到这在生产性的代码已经。
但是,在那里,返回了struct
的内容的二进制表示,而不仅仅是0
。
而且用例很简单:二进制操作。
带一元'&'的二元运算? –
我会看看如果我再次找到代码,那么我会发布一个例子。听起来很奇怪,看起来很有趣(我觉得很丑),但也许作者认为它更好使用'&'两次;) –
因为它为什么要做一些有意义的事情,当你可以做时...... _that_。 :/ –
@Matti:我们可以标记为合并。这比复制答案和问题要好。 –
@Tomalak:哇。我不知道这是可能的。 –
@Matti:我不是100%确信它是,但我听说过谣言...... :) –