引导问题:
当我们用C语言进行代码编写时,会遇到以下问题:

这时,未发生报错。然而:

当我们包含了stdlib.h 这一头文件后发生了报错。这是由于发生了命名冲突,在头文件stdlib.h中包含这rand函数与int类型的rand变量发生了冲突,而导致报错。
C++中,为了很好的解决这一问题,引入了命名空间这一概念:

解决了命名冲突的问题。接下来我来进行细节的介绍。
命名空间,顾名思义就是创造了一个空间,在代码编写里面就是创建了一个独立的域,与其他的域分离开来。命名空间的创建格式如下:
namespace 空间名称{
定义的变量/函数/类型等
}
在本例中,name1为命名空间名称,rand为定义的变量。此时,name1与main函数位于不同的域。要想访问不用域中的变量等数据,需要用域操作符 :: 去访问,访问规则如:空间名称 :: 变量名称
下面举个例子:
在C语言中,我们知道当定义全局变量与局部变量相冲突时,会采用就近原则(优先访问局部变量)。如:

全局a=0而局部a=1,结果a=1表明访问的是局部变量a=1。如果我们想访问全局变量该怎么办呢?这时就要用到域操作符:

这样就可以在全局进行查找。
下面我们回归主体,

这样我们就解决了命名空间问题,并初步知晓了命名空间的应用。
注意:命名空间只能定义在全局
刚才提到,命名空间中不仅仅可以定义变量,还可以定义函数和自定义类型:

那我们该如何访问呢?

和上面的例子一样,只需要加上空间名和域作用限定符就可以访问域里面的函数及结构体。
需要注意的是:结构体的域作用限定应该在结构体的名字前面,因为结构体在命名空间中被封装的是node。
另外命名空间还可以嵌套定义:

此时要想访问需要:

此外,命名空间可以定义多个,也可以跨文件定义,编译器会自动和并。
test.cpp

test.h

运行结果:

命名空间的展开
在日常练习中,总是要在命名空间中频繁访问数据,比较麻烦,于是我们可以使用关键字using来展开命名空间,实现随意访问,格式如下:using namespce 空间名

566

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



