在特定命名空间中编写库时,为该命名空间中的类提供重载运算符通常很方便。似乎(至少在 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&);
根据我的测试,它们似乎都运行良好。这两个选项之间有什么实际区别吗?哪种方法更好?
最佳答案
您应该在库命名空间中定义它们。 编译器无论如何都会通过参数相关查找找到它们。
无需污染全局命名空间。
关于c++ - C++ 中的命名空间和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171862/