相关疑难解决方法(0)

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

在特定命名空间中创建库时,为该命名空间中的类提供重载操作符通常很方便.看来(至少用g ++),重载的运算符可以在库的命名空间中实现:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib
Run Code Online (Sandbox Code Playgroud)

或全局命名空间

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);
Run Code Online (Sandbox Code Playgroud)

从我的测试来看,它们似乎都运行良好.这两个选项之间是否存在实际差异?两种方法都更好吗?

c++ namespaces operator-overloading

36
推荐指数
2
解决办法
2万
查看次数

运算符重载和命名空间

可能重复:
非成员运算符重载应放在何处?

在浏览SO时,我经常会发现涉及重载/定义a std::ostream& operator<<(std::ostream& os, const Foo& foo)或a的问题或答案Foo operator+(const Foo& l, const Foo& r).

虽然我知道如何以及何时(不)编写这些操作符,但我对namespace此事感到困惑.

如果我有以下课程:

namespace bar
{
  class Foo {};
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

同样的问题适用于operator+.那么,这里的好习惯是什么?为什么

c++ namespaces operator-overloading operator-keyword

12
推荐指数
2
解决办法
8837
查看次数