本文共 1183 字,大约阅读时间需要 3 分钟。
namespace 改变(增强或减弱)了符号的链接属性用来替代 C 语言中 static 和 extern 关键字.
既然提到了链接属性,肯定是多文件之间的符号的互相引用问题 在C语言中通过 extern 来解决问题 在C++语言中也可以通过extern 来解决问题,新增了namespace 来解决问题 一个namespace标识了一个scope(范围)(在一个scope内,可以自由引用.在不同的scope,需要通过特定的方式来引用) 并通过将不同namespace 命名为不同的名字,将名字作为id来索引,来引用 以xxx命名的namespace对应的scope 中的 符号.
- 默认命名空间一个cpp文件默认为一个scope,对应一个namespace,这个namespace 为 该文件的 默认命名空间.(默认命名空间不用语法创建,一个cpp文件在诞生(touch)之初,就是一个namespace)main 函数 只能存在于默认命名空间.- 有名命名空间在该cpp文件中,可以通过语法定义一个命名空间 A ,然后在命名空间 A 中定义 函数 变量 类型 等.可以在其他文件D中 引用该命名空间 A ,然后直接应用A中的定义的 函数 变量 类型.等价于C语言中的在D文件中extern 声明A中定义的函数 变量 类型.(在C语言中,类型不可以extern)- 匿名命名空间在该cpp文件B中,可以通过语法定义一个匿名命名空间,然后在该匿名命名空间 中定义 函数 变量 类型 等.在其他文件中 不可以引用B文件匿名命名空间中定义的 函数 变量 类型.等价于C语言中的在B文件匿名命名空间中的定义的 函数 变量 类型 前面加了 static.(在C语言中,类型前面不可以加static)- 嵌套命名空间在一个cpp中创建一个命名空间E,此时已经是嵌套命名空间(E在默认命名空间内)更深层的命名空间引用更浅层命名空间中定义的函数 类型 变量, 直接引用即可更浅层的命名空间引用更深层命名空间中定义的函数 类型 变量, 需要加前缀(例如在默认命名空间下引用E命名空间中定义的func函数,需要这样做 E::func1();
同一文件内使用namespace(1)namespace的三种引用方法// 方式一ace::Mutex mutex;// 方式二using ace::Mutex;Mutex mutex;// 方式三using namespace ace;Mutex mutex;
不同文件内使用namespace(1)namespace的三种引用方法
命名空间默认命名空间匿名命名空间嵌套命名空间
系统(???)自带命名空间自己写的命名空间
转载地址:http://nwigi.baihongyu.com/