命名空间的定义
- 一.缺陷
- 二.namespace和::
- 三.访问namespace
- 四.一些注意
- 1.工程里标准库的展开
- 2.命名域的小技巧
一.缺陷
在c语言中,如果我们同时定义一个全局变量和一个局部变量并且使用同一个名称的话,是可以编过的(因为全局和局部是属于两个不同作用域)。但会优先使用局部变量,这样的话在c语言中我们是无法直接访问全局变量a的。
在c++里自然也会有这种冲突,为了解决这个缺陷,c++定义了关键字namespace和操作符::来解决这个问题。
二.namespace和::
首先介绍一下::的使用。::是一个双目操作符,前面代表要访问的域,后面是要访问的变量。(因为全局的域就是空白,所以::前面是空白)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
那么在定义了一个自定义域后它计算机的访问方式是怎么样的呢?
实际上它的访问方式是局部域->全局域->自定义命名空间。但需要注意的是如果不访问命名空间,那么命名空间里的定义是不会被访问的。
三.访问namespace
访问namesp有以下两种方式:
1.展开命名空间
2.指定访问命名空间域
四.一些注意
1.工程里标准库的展开
我们经常会在一些较小的程序里写以下代码。
这是因为c++里的标准库(包括STL)都是用一个命名域所包含的,为了使用库函数,我们得首先展开命名域。std就是标准库库函数的命名域,当然我们也可以如下写:(使用域限制符号)
这样写毫无疑问要复杂许多,所以 一般不用这种写法。
上面直接展开所以标准库函数实际上是有隐患的,特别是在写的工程很大时,我们会很容易与库函数造成重命名的错误,为了解决这个问题,在工程中常常如下写:
我们只展开常用的部分,这样就可以避免重命名。
2.命名域的小技巧
1.命名域可以进行嵌套
2.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。