在特定命名空间中创建库时,为该命名空间中的类提供重载操作符通常很方便.看来(至少用g ++),重载的运算符可以在库的命名空间中实现:
namespace Lib { class A { }; A operator+(const A&, const A&); } // namespace Lib
或全局命名空间
namespace Lib { class A { }; } // namespace Lib Lib::A operator+(const Lib::A&, const Lib::A&);
从我的测试来看,它们似乎都运行良好.这两个选项之间是否存在实际差异?两种方法都更好吗?
您应该在库名称空间中定义它们.无论如何,编译器将通过参数依赖查找找到它们.
无需污染全局命名空间.
由于Koenig查找,将它放入库命名空间是有效的.