重载一元运算符&;有意义吗;? >,C++允许重载一元运算符和< /COD>(地址)。您是否知道在操作符&被正确重载时,有任何真实世界的示例?第二个更为具体的问题是,您是否知道在保留地址语义的同时,操作符&被正确重载的任何现实世界的示例?TIA

重载一元运算符&;有意义吗;? >,C++允许重载一元运算符和< /COD>(地址)。您是否知道在操作符&被正确重载时,有任何真实世界的示例?第二个更为具体的问题是,您是否知道在保留地址语义的同时,操作符&被正确重载的任何现实世界的示例?TIA,c++,operator-overloading,C++,Operator Overloading,我现在还不知道具体的例子,但我可以想象一个容器类,您可能希望在其中返回智能指针或迭代器。不过,我并不是说这一定有意义。它似乎在ATL中使用,例如,过载的一个很好的理由可能是将其设置为私有的,以防止用户使用它。我想不出任何一个真实的例子,在那里你会想要阻止这种情况,但这似乎是最合乎逻辑的原因来重载它。我在编写与Direct3D交互的类时重载了这个操作符。它是一个智能指针类,需要从操作符返回T**,以便可以在需要指针到指针的函数中使用。T**语义很少见,但在某些情况下确实需要它们。当对象有一个特殊用

我现在还不知道具体的例子,但我可以想象一个容器类,您可能希望在其中返回智能指针或迭代器。不过,我并不是说这一定有意义。

它似乎在ATL中使用,例如,

过载的一个很好的理由可能是将其设置为私有的,以防止用户使用它。我想不出任何一个真实的例子,在那里你会想要阻止这种情况,但这似乎是最合乎逻辑的原因来重载它。

我在编写与Direct3D交互的类时重载了这个操作符。它是一个智能指针类,需要从操作符返回T**,以便可以在需要指针到指针的函数中使用。T**语义很少见,但在某些情况下确实需要它们。

当对象有一个特殊用途的智能指针时,我做过一次<代码>操作符&悄悄地将堆栈分配的对象“提升”到基于堆的智能指针版本中,并且一旦对象位于指针内,该操作符的行为就会不同


我再也没有代码了,但当时是有原因的。这当然不是一个掉以轻心的决定,这条路两旁都是尸体。

我有207个
操作员(&()
:,)的真实例子

包括(获取底层裸整数),(显然也是为了生成原始数据),Mozilla(说“定义操作符是有风险的,但是,嘿,我们知道我们在做什么”),wxWidgets,以及更多

似乎有些人使用迭代器惯用语
&*It
向后获取原始引用或指针,而write
*&It
获取原始引用和
&It
获取原始指针


请注意,一旦您的类型重载了
运算符&
并返回了与内置运算符不同的内容,您的类型就不再是可复制的(在C++03中-C++0x似乎已经取消了它),因此不能再用作标准容器中的元素类型。

我的问题是——具体地说——关于真实世界的示例您是对的。智能指针类的行为必须类似于指针,因此需要运算符*甚至重载。砰的一声。@Samrat:过载&对于一个智能指针,到底给了你什么@萨姆拉特:我想这是行得通的,但在语义上有点烦人。考虑<代码> *和POBJ < /代码>不能让你回到你开始的地方!Samrat:使用相同的逻辑,必须重载运算符&对于任何代理对象,包括迭代器。。。我希望你同意这是疯狂的。奥利的论点非常有力,这正是我一直在寻找的for@Johannes:谢谢!我从来不知道谷歌代码搜索。很遗憾,我不能接受一个评论作为答案:)