23

可能重复:
有什么正当理由使一元运算符& 过载?

我刚读了这个问题,我不禁想知道:

为什么有人可能想要重载&("address-of") 运算符?

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

有任何合法的用例吗?

4

4 回答 4

32

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

于 2011-06-27T22:11:21.733 回答
8

因为他们是邪恶的,想让你受苦。

或者我猜你是否使用代理对象?我您可能想要返回指向托管对象而不是容器的指针 - 尽管我宁愿使用 getter 函数来做到这一点。否则,您必须记住使用boost::addressof.

于 2011-06-27T22:09:56.547 回答
8

是的,用于调试(如果您想跟踪任何访问或引用,您可能希望在对&*或的任何调用上放置一个日志行->)。

于 2011-06-27T22:10:13.080 回答
0

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

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

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

于 2011-06-27T22:13:26.357 回答