C++語言,名稱空間,namespace關鍵字
名稱空間,簡而言之,這是一個“空間”。
出現背景:
因為在C語言中定義了三個層次的作用域:檔案作用域、函式作用域和複合語句。但是在大型的軟體工程中,一個專案由多個人完成,有多個文字檔案,就很有可能出現 同名 變數、函式,在進行呼叫時,編譯器不知道該呼叫哪一個函式,或者使用哪一個變數的值,因此在編譯過程中很可能發生多重定義,或者發現結果出現問題。
定義:
定義名稱空間,需要使用到 namespace 關鍵字,後面跟名稱空間的 名字,然後接一對 {} 即可,{} 中即為名稱空間的成員。
作用:
名稱空間是 ANSI C++ 引入的可以由使用者命名的作用域,用來處理程式中常見的同名衝突。
目的:
對識別符號的名稱進行本地化,避免命名衝突或名字汙染,namespace 關鍵字的出現就是針對這種問題。
格式:(可以初始化,也可以不初始化)
(1)普通名稱空間 :可以定義變數、函式
namespace N1
{
int a=10;
char b;
float c;
int add(int left, int right)
{
return left + right;
}
}
(2)名稱空間可以巢狀
namespace N2 { int a = 20; char b; float c; namespace N3 { int a = 30; int add(int left, int right) { return left + right; } } }
(3)同一個工程中允許存在多個相同名稱的名稱空間,但請注意此時在相同名稱的不同名稱空間中,要避免出現定義同一變數,不然此時編譯報錯
原因在於,在相同名稱的名稱空間中,編譯器將此作為同一名稱空間,因此如果相同變數將作為重定義。例如,當兩個相同名稱的名稱空間,在使用時,出現可選變數時,是將此作為一個集合。
因此正確姿勢為:只要避免出現同一變數即可。
namespace N1
{
int a = 70;
char b;
float c;
}
namespace N1
{
int m = 20;
int n;
float ff;
}
使用:
(1) 一般使用:加空間名稱及作用限定符。在使用哪一個變數、函式時,只需說清其範圍,具體格式為 名稱空間名稱::變數/函式名稱 或者 namespace_name::var/function_name
(2)使用using 將名稱空間中成員引入
(3)使用 using namespace 名稱空間名稱引入。如 原始檔中 using namespace std 表明 將 輸入輸出 cout,cin ,edl等引入,可以將此句註釋掉 驗證。
注:
(1)若同時出現全域性變數和名稱空間,使用全域性變數(函式)時,用 ::全域性變數(函式)名 使用