可能重复:
非成员运算符重载应该放在哪里?
在浏览 SO 时,我经常发现涉及重载/定义 astd::ostream& operator<<(std::ostream& os, const Foo& foo)
或 a 的问题或答案Foo operator+(const Foo& l, const Foo& r)
。
虽然我知道如何以及何时(不)编写这些运算符,但我对此感到困惑namespace
。
如果我有以下课程:
namespace bar
{
class Foo {};
}
我应该在namespace
哪里写不同的运算符定义?
// Should it be this
namespace bar
{
std::ostream& operator<<(std::ostream& os, const Foo& foo);
}
// Or this ?
namespace std
{
ostream& operator<<(ostream& os, const bar::Foo& foo);
}
// Or this ?
std::ostream& operator<<(std::ostream& os, const bar::Foo& foo);
同样的问题也适用于operator+
. 那么,这里有什么好的做法,为什么?