运营商<< (流)去?

时间:2010-03-19 17:20:00

标签: c++ operators namespaces conventions

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

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

4 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:21)

operator<<( ..., MyClass )应与MyClass位于同一名称空间中。您应该将其视为MyClass接口的一部分,即使它恰好是(必然)非成员函数。

一些参考文献:

答案 2 :(得分:7)

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

答案 3 :(得分:2)

将任何东西(类型,运算符等)声明为您不拥有的命名空间的一部分通常是一种不好的做法。这会对使用您图书馆的人产生意想不到的后果。更好的解决方案是定义自己的命名空间,并在需要组合解决方案时导入std和命名空间。