C++ 运算符使用哪个名称空间<&书信电报;(小溪)去哪里?

C++ 运算符使用哪个名称空间<&书信电报;(小溪)去哪里?,c++,operators,namespaces,conventions,C++,Operators,Namespaces,Conventions,如果我有一些为库本地对象定义的重载ostream操作符,它们可以转到std名称空间吗?如果我没有在std名称空间中声明它们,那么我必须使用使用ns::operator将任何东西(类型、运算符等)声明为您不拥有的名称空间的一部分通常是一种不好的做法。这可能会给使用您的库的用户带来意想不到的后果。更好的解决方案是定义自己的命名空间,同时导入代码> STD和您的命名空间,当需要合并解决方案时, < P>根据Koenig Lookup(C++标准3.4.2)运算符> P> C++标准明确禁止您在STD命

如果我有一些为库本地对象定义的重载ostream操作符,它们可以转到std名称空间吗?如果我没有在std名称空间中声明它们,那么我必须使用
使用ns::operator将任何东西(类型、运算符等)声明为您不拥有的名称空间的一部分通常是一种不好的做法。这可能会给使用您的库的用户带来意想不到的后果。更好的解决方案是定义自己的命名空间,同时导入代码> STD<代码>和您的命名空间,当需要合并解决方案时,

< P>根据Koenig Lookup(C++标准3.4.2)<代码>运算符> P> C++标准明确禁止您在STD命名空间中声明自己的构造。若在全局命名空间中有来自外部C库的对象/类,那个么我是否也应该在全局命名空间中声明运算符?我认为在命名空间中声明运算符是一个好主意,因为它的.std::swap参数是一个显著的例外。特别允许您提供std::swap的模板专门化,它必须位于std名称空间
std::swap
也不例外。您可以为任何标准库模板提供专门化。将所有相关内容放在一个命名空间中的规则的例外情况是与MyClass相关的部分专门化,例如std::hash、std::less、std::swap等,它们位于::std::。