咱們假設一下這種狀況,在A班中,有一名同窗叫小明,在B班中,也有一名同窗叫小明,如今兩個班的同窗一塊兒聚會,老師找A班的小明,這時候他在人羣中喊一聲小明確定兩個小明都過來了,這個時候B班小明就白跑一趟了,爲了不這種尷尬,老師只要喊「A班的小明過來一下就好了」。在c++已經其餘某些語言中,也是這個道理,在不少大型項目中,因爲可能多人一塊兒開發,不免出現相同名字的變量,這個時候咱們就須要namespace了,在調用同名變量時,另外加上它的namespace,這樣就避免了出錯。ios
//namespace study #include<iostream> using namespace std; namespace first_space{ void func(){ cout<<"my first_space"<<endl; } } namespace second_space{ void func(){ cout<<"my second_space"<<endl; } } int main(){ first_space::func(); second_space::func(); }
您可使用 using namespace 指令,這樣在使用命名空間時就能夠不用在前面加上命名空間的名稱。這個指令會告訴編譯器,後續的代碼將使用指定的命名空間中的名稱。c++
//namespace study #include<iostream> using namespace std; namespace using_space{ void beusing(){ cout<<"I am using"<<endl; } } using namespace using_space; //namespace using_space{ // void beusing(){ // cout<<"I am using"<<endl; // } //} int main(){ beusing(); }
這裏注意using namespace必須在被調用空間定義後再使用。spa
using 指令也能夠用來指定命名空間中的特定項目。例如,若是您只打算使用 std 命名空間中的 cout 部分,您可使用以下的語句:code
#include <iostream> using std::cout; int main () { cout << "std::endl is used with std!" << std::endl; return 0; }
命名空間能夠定義在幾個不一樣的部分中,所以命名空間是由幾個單獨定義的部分組成的。一個命名空間的各個組成部分能夠分散在多個文件中。開發
因此,若是命名空間中的某個組成部分須要請求定義在另外一個文件中的名稱,則仍然須要聲明該名稱。下面的命名空間定義能夠是定義一個新的命名空間,也能夠是爲已有的命名空間增長新的元素:編譯器
namespace namespace_name { // 代碼聲明 }
在c++中,命名空間的使用是能夠嵌套的。以下所示:it
namespace namespace_name1 { // 代碼聲明 namespace namespace_name2 { // 代碼聲明 } }
注意,引用父級命名空間並不能直接調用子空間裏的變量,以下:io
#include<iostream> using namespace std; namespace first_space{ namespace second_space{ int a=0,b=1; } } using namespace first_space; int main(){ cout<<a<<" "<<b<<endl; //錯誤代碼,a未定義 return 0; }
正確調用方式以下:編譯
#include<iostream> using namespace std; namespace first_space{ namespace second_space{ int a=0,b=1; } } using namespace first_space::second_space; int main(){ cout<<a<<" "<<b<<endl; return 0; }