在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会致使不少冲突, 使用命名空间的目的是对标识符的名称进行本地化,以免命名冲突或名字污染,Namespace关键字的出现就是针对这种问题的。
namespace Namespace { // 内容 }
相同命名空间能够分割在不一样的文件中,编译器最后都会合成在一个命名空间下。函数
namespace Namespace { int iTest3; int iTest4; }
命名空间能够嵌套spa
namespace Namespace1 { int iTest0; int iTest1; namespace Namespace2 { int iTest1; int iTest3; int iTest4; } }
没有名称的命名空间code
namespace {}
本质上讲,一个命名空间就定义了一个范围,在命名空间中定义的任何东西都局限于该命名空间中。没有名称的命名空间能够建立只在声明它的文件中才可见的标识符。也就是说,只有在声明这个命名空间的文件中,它的成员才是可见的,它的成员才能够被直接访问,不须要命名空间名称来修饰。对于其余文件,该命名空间是不可见的。把全局名称的做用域限制在声明他的文件中的一种方式就是把它的声明为静态的,尽管C++支持全局静态,但最好的方式仍是使用未命名的空间。作用域
【命名空间内直接使用】编译器
namespace NamespaceTest { int iTest0; int iTest1; int iTest2; void TestNamespace() { iTest0 = 10; iTest1 = 20; } }
【命名空间名称限制】编译
void TestNamespace() { Namespace::iTest0 = 10; Namespace::iTest1 = 20; }
【导入命名空间】变量
using namespace Namespace; void TestNamespace() { iTest0 = 10; iTest1 = 20; }
【使用谁引入谁】命名空间
using Namespace::iTest0; using Namespace::iTest1; void TestNamespace() { iTest0 = 10; iTest1 = 20; }
访问命名空间里的变量和函数有两种方式: 定义命名空间:命名
namespace NamespaceTest { int iTest0; int iTest1; int iTest2; void TestNamespace() { iTest0 = 10; iTest1 = 20; } }
第一种: 使用 using namespace 空间名 例如:文件
using namespace NamespaceTest; int main() { iTest0 = 10; iTest1 = 20; cout <<"a = " <<iTest0 << endl; cout <<"b = " <<iTest1 << endl; return 0; }
第二种:空间名::变量(函数) 例如:
int main() { NamespaceTest::iTest0 = 10; NamespaceTest::iTest1 = 20; cout << "a = " << NamespaceTest::iTest0 << endl; cout << "b = " << NamespaceTest::iTest1 << endl; return 0; }