一、意义与价值
● 在C/C++编程里,变量、函数以及类,数量众多。它们的名称都处于全局作用域,这就很可能引发大量冲突。命名空间的出现,正是为了解决这一问题。它把标识符名称本地化,防止命名冲突和名字污染,而这一切都要归功于`namespace`关键字。
● 命名空间可以将相关功能的代码聚合在一起,形成逻辑上的模块,提高代码可读性和可维护性。同时在引入第三方库时,命名空间可避免其标识符与项目原有代码冲突。例如这串代码:

![]()
● 通过在命名空间中嵌套子命名空间或使用类封装,可以模拟私有成员和公共接口的访问控制,增强代码的安全性和稳定性。
命名空间主要是解决命名冲突的问题,还有一些例如增强可读性、可维护性、安全性和稳定性方面的意义与价值。
二、定义
命名空间的定义方式是namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。例如这里一个名为xiaoye的命名空间,这里的rand为变量,Add为函数,Node为类型。

注意:1.命名空间namespace本质是一个域,这个域和全局域各自独立。在访问一个变量或者函数的时候默认首先在它存在的局部域找它的定义,如果找不到会在全局域里面去找。但是全局域没有找到也不会直接默认进入命名空间域里面去找。
2.命名空间namespace只能定义在全局中,可以嵌套定义。同项目中不同文件相同名字的命名空间不会冲突,它们会融合。c++标准库都放在一个叫std(standard)的命名空间中。
三、使用与建议
在需要访问命名空间中的变量/函数/类型的时候,有三种方式不过更推荐第一种方式。
1.通过作用域解析运算符(::)指定命名空间访问,项⽬中推荐这种⽅式。例如:

2.using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。例如:

这里的rand就不能用这个方式展开存在命名冲突,tmp可以支持用这种方式。
3.展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。

这里也不能够直接展开命名空间中全部成员,因为rand存在命名冲突。

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



