域和命名空间的引入
在c语言中 ,变量和函数都是大量存在的,这些变量和函数都存在于全局作用域中或者局部作用域中,可能会导致变量冲突。
什么是全局作用域?
定义一个全局变量a 就是在全局范围内使用,处于全局作用域
什么是局部作用域?
在main函数中定义一个局部变量,在函数内部使用,处于局部作用域
每个函数都有自己的局部作用域
局部和全局都有相同的变量
编译器会先从局部域寻找变量 再去全局域寻找
上图只是单个变量在局部和全局中名字冲突
如果是函数名和变量名冲突呢
编译器是这样报错的 rand在以前的定义是函数
c语言没办法解决类似的命名冲突的问题 所以c++提出的命名空间域来解决这样的问题
1、命名空间的定义
![](https://img-blog.csdnimg.cn/direct/04dd08b0c1fd443593b1e5be94dcbece.png)
1.2命名空间域的嵌套
1.3命名空间的合并
2、命名空间的使用
命名空间域该怎么使用呢??
这里引入一个新的符号 ::作用域限定符
命名空间域的使用有三种方式
1.加命名空间及作用域限定符
2.使用using 将空间的某个成员展开 (类似于野生菜园子的一部分变成了共享菜园子)
3.使用using namespace 命名空间全部展开 (野生的菜园子全部变成共享菜园子)
命名空间域的使用和全局域/局部域的区别就是 需要作用域限定符
命名空间使用的优点和缺点
1.不对命名空间进行任何展开时
每次使用有需要命名空间加限定符 写起来很麻烦
补充一点:std 是c++所有库函数的命名空间
但是在一些项目和大工程中 命名空间做到了很好的隔离和防护作用
参数重名问题 还有访问冲突问题 得到了很好的解决
![](https://img-blog.csdnimg.cn/direct/eca5a10f651942899ecfb29c80d33590.png)
![](https://img-blog.csdnimg.cn/direct/44aef16baaf4444b8e91b7cd169b7251.png)