Wiki
名稱空間
約 2 分鐘閱讀
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.名稱空間與名稱衝突
在 C++ 應用程式中。例如,您可能會寫一個名為 xyz() 的函式,在另一個可用的庫中也存在一個相同的函式 xyz()。這樣,編譯器就無法判斷您所使用的是哪一個 xyz() 函式。
因此,引入了 名稱空間 這個概念,專門用於解決上面的問題,它可作為附加資訊來區分不同庫中相同名稱的函式、類、變數等。使用了名稱空間即定義了上下文。本質上,名稱空間就是定義了一個範圍。
1.1.定義名稱空間
名稱空間的定義使用關鍵字 namespace ,後跟名稱空間的名稱,如下所示:
namespace namespace_name {
// 代码声明
}
執行結果: 此程式碼塊不含 main 函式,是語法、介面或分檔案示例,不能獨立執行,因此沒有終端輸出。
為了呼叫帶有名稱空間的函式或變數,需要在前面加上名稱空間的名稱,如下所示:
name::code; // code 可以是变量或函数
執行結果: 此程式碼塊不含 main 函式,是語法、介面或分檔案示例,不能獨立執行,因此沒有終端輸出。
1.2.using 指令
您可以使用 using namespace 指令,這樣在使用名稱空間時就可以不用在前面加上名稱空間的名稱。這個指令會告訴編譯器,後續的程式碼將使用指定的名稱空間中的名稱。
#include <iostream>
using namespace std;
// 第一个命名空间
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// 第二个命名空间
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
// 第三个命名空间
namespace third_space{
void func()
{
cout << "Inside second_space" << endl;
}
}
using namespace first_space;
using second_space::func; //(与25行代码建议不能共存,因为都导入了func()函数),(这种方法更好更推荐)
int main ()
{
// 调用第一个命名空间中的函数
func();
// 调用第二个命名空间中的函数
func(); //(与32行代码不能共存)
//调用第三个命名空间中的函数
third_space::func();
return 0;
}
執行結果: 編譯失敗:using namespace 把兩個同名 func() 同時引入當前作用域,呼叫 func() 時產生二義性。
1.3.巢狀的名稱空間
名稱空間可以巢狀,您可以在一個名稱空間中定義另一個名稱空間,如下所示:
namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
執行結果: 此程式碼塊不含 main 函式,是語法、介面或分檔案示例,不能獨立執行,因此沒有終端輸出。
您可以通過使用 :: 運算子來訪問巢狀的名稱空間中的成員:
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
// 访问 namespace_name1 中的成员
using namespace namespace_name1;
執行結果: 此程式碼塊不含 main 函式,是語法、介面或分檔案示例,不能獨立執行,因此沒有終端輸出。