正在使用未定义的嵌套 std 和 posix 命名空间



根据(现已失效的)关于扩展std命名空间和[namespace.constraint]的StackOverflow文档:

除非另有指定,否则如果C++程序将声明或定义添加到命名空间std或命名空间 std 中的命名空间,则未定义它的行为。

除非另有指定,否则如果C++程序将声明或定义添加到命名空间posix或命名空间posix中的命名空间,则未定义该程序的行为。命名空间posix保留供 ISO/IEC 9945 和其他 POSIX 标准使用。

这些规则是否仅适用于全局stdposix命名空间,还是以下规则也未定义:

namespace HelloWorld {
    namespace std {
        void terminate();
    }
}

也许是因为我是英语母语,但这些规则的措辞在这方面似乎有点模糊。

这确实是英语的一个有点晦涩的规则。您会看到规则讨论了命名空间 std 中的命名空间。为什么我们不谈论"命名空间std"或"命名空间std"?这是因为std是该命名空间的(唯一)名称。比较"总统","总统","特朗普总统"。

所以是的,namespace std唯一地引用了该顶级命名空间。

相关内容

  • 没有找到相关文章

最新更新