C++ 命名空间全解析
1. 命名冲突与全局作用域
在 C++ 编程中,命名冲突是一个常见的问题。理智的人不会故意在 C++ 程序中命名一个类为 std ,但我们都可能犯错。通过查看编译器在遇到命名冲突时发出的消息,我们能更好地识别这些错误。
大多数应用程序员不需要使用全局作用域前缀,因为可以谨慎选择不冲突的名称。但库作者不同,他们不知道代码会在何处使用,因此谨慎的库作者常使用全局作用域前缀。
2. 全局命名空间
在所有命名空间之外声明的名称是全局的。在了解命名空间之前,“全局”意味着“在任何函数之外”,现在 C++ 程序员指的是在命名空间作用域声明的名称,即“在任何函数之外”,这样的名称可以在命名空间内或任何显式命名空间之外声明。
程序的 main 函数必须是全局的,即在命名空间作用域,但不在任何命名空间中。如果在命名空间中定义另一个名为 main 的函数,它不会干扰全局的 main 函数,但会让阅读代码的人感到困惑。
3. std 命名空间
标准库使用 std 命名空间,不允许在 std 命名空间中定义任何名称,但可以特化 std 中定义的模板,前提是至少有一个模板参数是用户定义的类型。
C++ 标准库继承了 C 标准库的一些函数、类型和对象。可以通过名称以字母 c 开头来识别 C 派生的头文件,例如 <
超级会员免费看
订阅专栏 解锁全文
1486

被折叠的 条评论
为什么被折叠?



