命名空间的作用
问:为什么会有命名空间的出现?
命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字
污染
命名冲突是指:
- 跟库里的命名冲突 (如库中有rand,我们再命名rand)
- 项目中的名字互相冲突(如一个项目中,张三命名了less,我也命名了less)
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
域
域分为:
- 命名空间域
- 类域
- 全局域
- 局部域
域作用限定符
域作用限定符写作::,两个双冒号。
问:这里为什么打印的是1呢?
这里访问优先是访问局部域,再访问全局域,但不会主动去其他的域里去找
问:那么如何访问命名空间域呢?
- 展开命名空间域(本质:编译时是否到命名空间域里去搜索)
- 指定访问命名空间域
命名空间的补充点
- 命名空间可以嵌套使用
- 多个同名的命名空间会被合并
问:是否建议展开库中的std?
- 直接展开会有风险,定义跟库重名的会报错
- 日常训练中可以展开
- 项目中建议指定访问,不要轻易展开命名空间
像这样打印的时候每次都要指定std域,会很麻烦。
解决方法:可以将命名空间的某一项给展开