在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; }