operator <<(stream)去哪个命名空间?

Any*_*orn 15 c++ namespaces conventions operators

如果我有一些为库本地对象定义的重载ostream运算符,那么它们可以转到std命名空间吗?如果我没有在std命名空间中声明它们,那么我必须使用using ns:: operator <<.

作为一个可能的后续问题,是否有任何运算符应该转到标准或全局命名空间?

Kir*_*sky 24

根据Koenig Lookup(C++标准3.4.2),operator<<将在参数的名称空间中进行搜索.无需在std命名空间中声明它.


Her*_*ter 21

operator<<( ..., MyClass )应该与...相同的命名空间MyClass.您应该将其视为界面的一部分MyClass,即使它恰好是(必然)非成员函数.

几个参考:


Joh*_*ing 7

C++标准明确禁止您在std命名空间中声明自己的构造.

  • `std :: swap`也不例外.您可以为任何标准库模板提供特化. (5认同)