为啥有人要重载 & (address-of) 运算符? [复制]
Posted
技术标签:
【中文标题】为啥有人要重载 & (address-of) 运算符? [复制]【英文标题】:Why would anyone want to overload the & (address-of) operator? [duplicate]为什么有人要重载 & (address-of) 运算符? [复制] 【发布时间】:2011-09-23 21:04:28 【问题描述】:可能重复:What legitimate reasons exist to overload the unary operator& ?
我刚看了this question,不禁好奇:
为什么有人可能想要重载&
(“address-of”)运算符?
SomeClass* operator&() const
return address_of_object;
有任何合法的用例吗?
【问题讨论】:
@Matti:我们可以标记合并。这比复制答案和问题要好。 @Tomalak:哇。我不知道这是可能的。 @Matti:我不是 100% 相信这是真的,但我听说过谣言... :) 【参考方案1】:如果您正在处理任何类型的包装器对象,您可能希望或需要透明地将对包装器的访问转发到包含的对象。在这种情况下,您不能返回指向包装器的指针,而需要重载地址运算符以返回指向包含对象的指针。
【讨论】:
嘿,我搜索了“c++ 重载地址”,正是为了找出我是否可以做到这一点。感谢您非常快速的保证:-)【参考方案2】:因为他们是邪恶的,希望你受苦。
或者我猜你是否使用了代理对象?我假设您可能希望返回指向托管对象而不是容器的指针——尽管我宁愿使用 getter 函数来做到这一点。否则你必须记住使用boost::addressof
之类的东西。
【讨论】:
我猜代理对象的意义在于你不知道它的存在。 (或者你表现得好像你不知道一样。)特别是,你不知道它的地址。无论如何,这通常是暂时的。【参考方案3】:是的,用于调试(如果您想跟踪任何访问或引用,您可能需要在对 &
、*
或 ->
的任何调用上添加一个日志行。
【讨论】:
【参考方案4】:我已经在生产代码中看到了这一点。
但是在那里,返回了 struct
内容的二进制表示,而不仅仅是 0
。
用例很简单:二元运算。
【讨论】:
二元运算与一元&
?
如果我再次找到代码,我会看看,然后我会发布一个示例。听起来很奇怪,看起来很有趣(我觉得很丑),但也许作者认为两次使用&
会更好;)
因为为什么要让它做一些有意义的事情,而当你可以做... 那个。 ://以上是关于为啥有人要重载 & (address-of) 运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章