命名空间和 C++ 库

Namespaces and C++ library

提问人:Sonu Gupta 提问时间:10/11/2022 更新时间:10/11/2022 访问量:224

问:

命名空间是否包含在库中,或者库是否包含在命名空间中? C++ 标准库中有多少个命名空间?

C++ 命名空间 standard-library

评论

2赞 Drew Dormann 10/11/2022
它们是正交的。一个库可以有多个命名空间。一个命名空间可以位于多个库中。
0赞 Sonu Gupta 10/11/2022
@user17372522那么我应该考虑标准库是在 std 命名空间下编写的还是 std 命名空间是在标准库内编写的??
3赞 Drew Dormann 10/11/2022
也不。C++ 标准显式允许其他库添加到 std 命名空间。(在特定情况下)。并非所有标准库都在 std 命名空间中。并非所有 std 命名空间都在标准库中。这就是“正交”的意思——它们是不相关的概念。你不应该试图用另一个来描述一个。
0赞 Sonu Gupta 10/11/2022
@DrewDormann这意味着也有一些库使用 std 命名空间,并且标准库中除了 std 之外还有其他命名空间?
0赞 Drew Dormann 10/11/2022
我相信这两个问题都在你接受的答案中得到了解答。

答:

3赞 user17732522 10/11/2022 #1

它们是正交的。一个库可以使用多个命名空间,一个命名空间可以在多个库之间拆分。但是,最好将库的内容范围限定为特定于该库的(通常是单个)命名空间(其中嵌套的 + 命名空间),以避免多个库之间的名称冲突并清楚起见。

标准库(除了全局命名空间范围)仅使用命名空间(+ 嵌套命名空间),尽管命名空间后跟任意数量的数字和命名空间也保留给标准库,以便将来标准化。标准库内部也有多个嵌套命名空间,例如 和 ,并在全局命名空间作用域中为其保留某些名称。stdstdposixstdstd::filesystemstd::ranges

标准库还显式允许用户代码(包括用户库)将某些声明(特别是某些类的部分专用化)添加到命名空间中。所以也并不总是完全局限于标准库。stdstd

评论

1赞 Fantastic Mr Fox 10/11/2022
还有子命名空间,比如 和filesystemexperimental