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

发布于 2024-07-06 08:28:13 字数 398 浏览 4 评论 0原文

在特定名称空间中编写库时,为该名称空间中的类提供重载运算符通常很方便。 看来(至少对于 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&);

中从我的测试来看,它们似乎都工作正常。 这两个选项之间有什么实际区别吗? 这两种方法更好吗?

When authoring a library in a particular namespace, it's often convenient to provide overloaded operators for the classes in that namespace. It seems (at least with g++) that the overloaded operators can be implemented either in the library's namespace:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

or the global namespace

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

Lib::A operator+(const Lib::A&, const Lib::A&);

From my testing, they both seem to work fine. Is there any practical difference between these two options? Is either approach better?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦里°也失望 2024-07-13 08:28:13

您应该在库命名空间中定义它们。
无论如何,编译器都会通过参数相关查找找到它们。

不需要污染全局命名空间。

You should define them in the library namespace.
The compiler will find them anyway through argument dependant lookup.

No need to pollute the global namespace.

篱下浅笙歌 2024-07-13 08:28:13

由于 Koenig 查找,将其放入库命名空间是可行的。

Putting it into the library namespace works because of Koenig lookup.

过去的过去 2024-07-13 08:28:13

您应该在命名空间中定义它,这既是因为语法不会那么冗长,又不会使全局命名空间变得混乱。

实际上,如果您在类定义中定义重载,这将成为一个没有实际意义的问题:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

} // namespace Lib

You should define it in the namespace, both because the syntax will be less verbose and not to clutter the global namespace.

Actually, if you define your overloads in your class definition, this becomes a moot question:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

} // namespace Lib
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文