C/C++之C++命名空间

(1)命名空间可以是不连续的而且允许多层嵌套

1、一个命名空间可以分散定义在一个文件的多个地方,分开的命名空间相互补充

测试1

2、一个命名空间可以分散定义在多个文件中。命名空间可以不连续意味着可以用分离的接口文件和实现文件构成命名空间(类的定义和实现)。例如下面的MyClass类,虽然都在一个命名空间MyClassSpace中,但是,这仍然是两部分,不要以为在main里面会在MyClassSpace中找到变量b。

测试2

(2)命名空间的别名

测试3

(3)using 声明和using编译指令

1、使用using 声明

使用using声明后,只能使用被声明的成员。

测试4

2、使用using编译指令

使用using编译指令后,该命名空间中的所有成员就都包含到当前文件中了。

测试5

使用using namespace也有一定的坏处,如下

using全局与局部的区别

using语句可以在函数外边以全局的方式引用,例如经常出现的 using namepace std;;也可以以局部的方式出现函数中,两者的区别在于:using后的成员的作用域不同。

(5)匿名命令空间

当声明命名空间时的名称为空时,则该命名空间为匿名命名空间(unnamed namespace)。匿名的空间是C++用于替代使用static定义作用域为本编译单元的全局函数或全局变量的一种新的替代方式,匿名空间与命名的命名空间一样可以嵌套。由于匿名命名空间没有命名空间的名字,所以也无法在其它的编译单元内通过extern声明该变量,于是该变量自然也只在本编译单元内可见。可以通过::member_name引用匿名命名空间的成员。

使用匿名空间比使用static至少有两个好处:

1) 对于一组多个标识符函数只需要使用一个匿名空间来声明,不需要多次输入static。

2) 可以嵌套。这样可以在不同命名空间中使用多个同名的标识符。

在C++的标准中也建议使用匿名命名空间定义编译单元内部的全局变量,替代static。static关键词在此处被认为是过期的(deprecated)特性。

(6)std命名空间

标准C++把自己的整个库定义在std命名空间中。

猜你喜欢

转载自blog.csdn.net/zcshoucsdn/article/details/79334642