C++命名空间namespace 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等
为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域
MFC 中并没有使用命名空间,但是在
NET 框架、MC++和C++/CLI 中,都大量使用了命名空间
1)作用域与命名空间 与命名空间相关的概念有: 声明域(declaration region)—— 声明标识符的区域
如在函数外面声明的全局变量,它的声明域为声明所在的文件
在函数内声明的局部变量,它的声明域为声明所在的代码块(例如整个函数体或整个复合语句)
潜在作用域(potential scope)—— 从声明点开始,到声明域的末尾的区域
因为C++采用的是先声明后使用的原则,所以在声明点之前的声明域中,标识符是不能用的
即,标识符的潜在作用域,一般会小于其声明域
作用域(scope)—— 标识符对程序可见的范围
标识符在其潜在作用域内,并非在任何地方都是可见的
例如,局部变量可以屏蔽全局变量、嵌套层次中的内层变量可以屏蔽外层变量,从而被屏蔽的全局或外层变量在其倍屏蔽的区域内是不可见的
所以,一个标识符的作用域可能小于其潜在作用域
命名空间 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个集团的声明放在同一个命名空间中
原来 C++标识符的作用域分成三级:代码块({„„},如复合语句和函数体)、类和全局
现在,在其中的类和全局之间,标准C++又添加了命名空间这一个作用域级别
命名空间可以是全局的,也可以位于另一个命名空间之中,但是不能位于类和代码块中
所以,在命名空间中声明的名称(标识符),默