c++ - C++ 中的命名空间和运算符重载

标签 c++ operator-overloading namespaces

在特定命名空间中编写库时,为该命名空间中的类提供重载运算符通常很方便。似乎(至少在 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/

相关文章:

c++ - 我可以使用函数符号 operator#() 来调用内置类型的运算符吗?

c++ - 使用 VS2012 安装 boost 1.52

c++ - ADT - 迭代器 - 运算符++

c# - 为什么一个类型不应该依赖于它包含的命名空间中的类型?

R:我应该使用与函数参数相同的名称命名变量吗?

xml - 给元素添加命名空间

c++ - 使用 libcurl 的项目中 undefined reference

c++ - c++类与OpenCV矩阵运算之间的转换

python - 是否可以在 Python 中重载/导入?

c++ - 重载级联插入运算符