第 14 節
命名空間
0瀏覽次數0訪問次數--跳出率--平均停留
命名空間與名稱衝突
在 C++ 應用程序中。例如,您可能會寫一個名為 xyz() 的函數,在另一個可用的庫中也存在一個相同的函數 xyz()。這樣,編譯器就無法判斷您所使用的是哪一個 xyz() 函數。
因此,引入了 命名空間 這個概念,專門用於解決上面的問題,它可作為附加信息來區分不同庫中相同名稱的函數、類、變量等。使用了命名空間即定義了上下文。本質上,命名空間就是定義了一個範圍。
定義命名空間
命名空間的定義使用關鍵字 namespace ,後跟命名空間的名稱,如下所示:
namespace namespace_name {
// 代码声明
}
運行結果: 此代碼塊不含 main 函數,是語法、接口或分文件示例,不能獨立運行,因此沒有終端輸出。
為了調用帶有命名空間的函數或變量,需要在前面加上命名空間的名稱,如下所示:
name::code; // code 可以是变量或函数
運行結果: 此代碼塊不含 main 函數,是語法、接口或分文件示例,不能獨立運行,因此沒有終端輸出。
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() 時產生二義性。
嵌套的命名空間
命名空間可以嵌套,您可以在一個命名空間中定義另一個命名空間,如下所示:
namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
運行結果: 此代碼塊不含 main 函數,是語法、接口或分文件示例,不能獨立運行,因此沒有終端輸出。
您可以通過使用 :: 運算符來訪問嵌套的命名空間中的成員:
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
// 访问 namespace_name1 中的成员
using namespace namespace_name1;
運行結果: 此代碼塊不含 main 函數,是語法、接口或分文件示例,不能獨立運行,因此沒有終端輸出。