运算符 << 执行哪个命名空间(流)去?

发布于 2024-08-26 01:11:03 字数 166 浏览 11 评论 0 原文

如果我有一些为库本地对象定义的重载 ostream 运算符,它们可以转到 std 命名空间吗?如果我不在 std 命名空间中声明它们,那么我必须使用 using ns::operator <<

作为一个可能的后续问题,是否有任何运算符应该进入标准或全局命名空间?

If I have have some overloaded ostream operators, defined for library local objects, is its okay for them to go to std namespace? If I do not declare them in std namespace, then I must use using ns:: operator <<.

As a possible follow-up question, are there any operators which should go to standard or global namespace?

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

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

发布评论

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

评论(4

纸短情长 2024-09-02 01:11:03

根据 Koenig Lookup (C++ Standard 3.4.2) operator<< 将在参数的命名空间中搜索。无需在 std 命名空间中声明它。

According to Koenig Lookup (C++ Standard 3.4.2) operator<< will be searched in namespaces of arguments. No need to declare it in std namespace.

风情万种。 2024-09-02 01:11:03

operator<<( ..., MyClass ) 应与 MyClass 位于同一命名空间中。您应该将其视为 MyClass 接口的一部分,即使它恰好(必然)是非成员函数。

一些参考资料:

operator<<( ..., MyClass ) should go in the same namespace as MyClass. You should think of it as part of the interface of MyClass, even though it happens to be (necessarily) a non-member function.

A couple of references:

美男兮 2024-09-02 01:11:03

C++ 标准明确禁止您在 std 命名空间中声明您自己的构造。

The C++ Standard explicitly forbids you from declaring your own constructs in the std namespace.

终止放荡 2024-09-02 01:11:03

将任何内容(类型、运算符等)声明为您不拥有的命名空间的一部分通常是一种不好的做法。这可能会给使用您的库的人带来意想不到的后果。更好的解决方案是定义您自己的命名空间,并在需要组合解决方案时导入 std 和您的命名空间。

It is generally a bad practice to declare anything (types, operators, etc ...) to be a part of a namespace you do not own. This can have unexpected consequences for people consuming your library. A better solution is to define your own namespace and to import both std and your namespace when you need to combine solutions.

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