根据(现已失效的)关于扩展std
命名空间和[namespace.constraint]的StackOverflow文档:
除非另有指定,否则如果C++程序将声明或定义添加到命名空间
std
或命名空间 std 中的命名空间,则未定义它的行为。
和
除非另有指定,否则如果C++程序将声明或定义添加到命名空间
posix
或命名空间posix
中的命名空间,则未定义该程序的行为。命名空间posix
保留供 ISO/IEC 9945 和其他 POSIX 标准使用。
这些规则是否仅适用于全局std
和posix
命名空间,还是以下规则也未定义:
namespace HelloWorld {
namespace std {
void terminate();
}
}
也许是因为我是英语母语,但这些规则的措辞在这方面似乎有点模糊。
这确实是英语的一个有点晦涩的规则。您会看到规则讨论了命名空间 std
中的命名空间。为什么我们不谈论"命名空间std
"或"命名空间std
"?这是因为std
是该命名空间的(唯一)名称。比较"总统","总统","特朗普总统"。
所以是的,namespace std
唯一地引用了该顶级命名空间。