为什么对存储在STL容器中的类禁止重载operator&()?

sha*_*oth 7 c++ stl operator-overloading operators

突然在本文中("问题2")我看到一个声明,即C++标准禁止使用STL容器存储类的元素,如果该类有重载的话operator&().

过载operator&() 确实存在问题,但看起来像默认的"地址"操作符可以通过一组看起来很脏的演员表来boost::addressof()轻松使用,这些演员阵容被用于并且被认为是便携式和标准编译器.

为什么operator&()boost::addressof()解决方法存在的情况下禁止存储在STL容器中的类超载?

sbi*_*sbi 6

在没有查看链接的情况下,我认为这些技巧boost::addressof()是在要求不要为&std lib的容器中保存的对象重载一元前缀之后发明的.

我依旧记得Pete Becker(后来为Dinkumware的标准库实现工作)曾经说过,每个重载地址运算符并希望他们的标准库实现仍然有效的人都应该通过实现这样做的标准库来惩罚.

  • @MadKeithV:当为C++"发明"运算符重载时,必须决定哪些运算符应该是可重载的,哪些不应该是.由于当时没有任何经验 - 至少没有C++ - ,它必须被猜测.事后看来,很容易批评这些猜测.(虽然,因为它确实被使用,有人会认为重载一元前缀`&`是有用和有益的.) (3认同)