为啥有人要重载 & (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) 运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::string append 在 rval ref 上没有重载?

c++中重载输出操作符,为啥要返回引用

为啥我有这个错误重载运算符?

为啥不调用具有 const 引用返回值的重载方法?

c++中重载输出流对象,为啥要返回引用

为啥具有“相同签名”的模板和非模板函数重载调用非模板函数?