突然在this article (“problem 2”),我看到一个声明,C标准禁止使用STL容器存储类的元素,如果该类有一个重载的运算符&().
具有重载的运算符&()can indeed be problematic,但看起来像默认的“地址”运算符可以在a set of dirty-looking casts that are used in boost::addressof()
轻松使用,并且被认为是便携式和标准编译器.
当boost :: addressof()变通方存在时,为什么禁止存储在STL容器中的类重载operator&()?
解决方法:
在没有查看链接的情况下,我认为boost :: addressof()中的技巧是在要求不重载一元前缀&之后发明的.对象要保存在std lib的容器中.
我依旧记得Pete Becker(后来为Dinkumware的标准库实现工作)曾经说过,每个重载地址运算符并希望他们的标准库实现仍然有效的人都应该通过实现这样做的标准库来惩罚.