C++命名空間使用詳細介紹
1.前言
在c++中,為了避免代碼名稱上所產生沖突,引入了命名空間這個東西。
命名空間相當于劃分出一定的空間,為特定的類型,函數和變量等的名稱(也就是標識符)提供了一個范圍。
命名空間之內的標識符訪問彼此沒有限制,命名空間之外的標識符可通過使用每個標識符的完全限定名來訪問成員,也可通過單個標識符的using聲明或命名空間中所有標識符的using指令來訪問成員。
命名空間可以定義在幾個不同的部分中,因此命名空間是由幾個單獨定義的部分組成的。一個命名空間的各個組成部分可以分散在多個文件中。
2.定義
命名空間的定義使用關鍵字namespace,后跟命名空間的名稱。
namespace namespace_name
{
// 代碼聲明
}
調用帶有命名空間的函數或者變量時,需要在前面加上命名空間的名稱(使用完全限定名)。
namespace_name::code; // code 可以是變量或函數
樣例:
#include<iostream> using namespace std; namespace A { void func() { cout << "A" << endl; } } // 第二個命名空間 namespace B { void func() { cout << "B" << endl; } } int main() { // 調用第一個命名空間中的函數 A::func(); // 調用第二個命名空間中的函數 B::func(); return 0; }
結果:
3.using 指令
當使用using 指令時,便可不用加完全限定名直接訪問。
這個指令會讓編譯器直接使用namespace里的所有名稱。
樣例:
#include<iostream> using namespace std; namespace A { void func() { cout << "A" << endl; } } // 第二個命名空間 namespace B { void func() { cout << "B" << endl; } } using namespace B; int main() { // 只會調用第二個命名空間中的函數 func(); return 0; }
結果:
4.using 聲明
使用 using 聲明,以將一個標識符引入范圍:
#include<iostream> using namespace std; namespace A { class a { public: void func() { cout << "A" << endl; } }; } using namespace A; A::a aa; int main() { aa.func(); return 0; }
結果為:
5.嵌套的命名空間
一個命名空間中可以定義另一個命名空間,一般形式為:
namespace namespace_name1 { // 代碼聲明 namespace namespace_name2 { // 代碼聲明 } }
像上列代碼,如果要訪問namespace_name2中的成員,我們得使用::運算符來訪問:
// 訪問 namespace_name2 中的成員
using namespace namespace_name1::namespace_name2;
// 訪問 namespace_name1 中的成員
using namespace namespace_name1;
樣例:
#include<iostream> using namespace std; namespace A { void func() { cout << "A" << endl; } // 第二個命名空間 namespace B { void func() { cout << "B" << endl; } } } using namespace A::B; int main() { // 只會調用第二個命名空間中的函數 func(); return 0; }
結果為:
到此這篇關于C++命名空間使用詳細介紹的文章就介紹到這了,更多相關C++命名空間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!