【问题标题】: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% 相信这是真的,但我听说过谣言... :)

标签: c++ operator-overloading overloading address-operator


【解决方案1】:

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

【讨论】:

  • 嘿,我搜索了“c++ 重载地址”,正是为了找出我是否可以做到这一点。感谢您非常快速的保证:-)
【解决方案2】:

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

或者我猜你是否使用了代理对象?我假设您可能希望返回指向托管对象而不是容器的指针——尽管我宁愿使用 getter 函数来做到这一点。否则你必须记住使用boost::addressof之类的东西。

【讨论】:

  • 我猜代理对象的意义在于你不知道它的存在。 (或者你表现得好像你不知道一样。)特别是,你不知道它的地址。无论如何,这通常是暂时的。
【解决方案3】:

是的,用于调试(如果您想跟踪任何访问或引用,您可能需要在对 &*-> 的任何调用上添加一个日志行。

【讨论】:

    【解决方案4】:

    我已经在生产代码中看到了这一点。

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

    用例很简单:二元运算。

    【讨论】:

    • 二元运算与一元&?
    • 如果我再次找到代码,我会看看,然后我会发布一个示例。听起来很奇怪,看起来很有趣(我觉得很丑),但也许作者认为两次使用& 会更好;)
    • 因为为什么要让它做一些有意义的事情,而当你可以做... 那个。 ://
    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 2018-03-16
    • 2012-04-27
    • 2014-05-20
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多