命名空間的使用
命名空間是用來組織和重用**的。如同名字一樣的意思,namespace(名字空間),之所以出來這樣乙個東西,是因為人類可用的單詞數太少,並且不同的人寫的程式不可能所有的變數都沒有重名現象,對於庫來說,這個問題尤其嚴重,如果兩個人寫的庫檔案**現同名的變數或函式(不可避免),使用起來就有問題了。為了解決這個問題,引入了名字空間這個概念,通過使用 namespace ***;你所使用的庫函式或變數就是在該名字空間中定義的,這樣一來就不會引起不必要的衝突了。
本質上,命名空間就是定義了乙個範圍。
定義命名空間,需要使用到namespace關鍵字,後面跟命名空間的名字,然後接一對{}即可,{}中即為命名空間的成員
比如:namespace name {}
命名空間的特性:可以巢狀,可以合併
這裡是試例**
//1. 普通的命名空間
namespace n1 // n1為命名空間的名稱
}//2. 命名空間可以巢狀
namespace n2
namespace n3 }
}//3. 同乙個工程中允許存在多個相同名稱的命名空間,編譯器最後會合成同乙個命名空間中。
namespace n1
}
我們所接觸的第乙個c++**就用到了命名空間std
#include
using
namespace std;
intmain()
或者這樣的
#include
intmain()
這裡引出了命名空間的兩種使用方法,對應下面的第1,2點,命名空間一共有三種使用方法:
(1)使用using namespace + 命名空間名
(2)使用作用域限定符
(3)使用using和作用域限定符
關於using和作用域限定符::
using指令引入的名稱遵循正常的範圍規則。名稱從使用 using 指令開始是可見的,直到該範圍結束。此時,在範圍以外定義的同名實體是隱藏的。
作用域限定符::申明變數或函式所屬類的符號。
(1)使用using namespace + 命名空間名
這裡相當於把std(標準命名空間)裡的**展開了,所以你能在接下來的**中直接使用std裡的函式方法。
(2)使用作用域限定符
相當於呼叫一次該命名空間下的變數或函式方法,之後使用還需要重複使用作用域限定符
比如:
std::cout <<
"hello world1"
<< std::endl;
std::cout <<
"hello world2"
<< std::endl;
//必須反覆使用作用域限定符
(3)使用using和作用域限定符
#include
using std::cout;
using std::endl;
intmain()
這樣相當於只展開了這兩個變數方法,可以接下來一直使用。
ps:對於巢狀的命名空間,可一層一層的訪問。
using n2::n3::c;
或者直接使用
n2::n3::c =
1;
補充:在c++語言中,std其實就是standard標準的意思.所以稱std為標準命名空間,c++標準庫中的函式或者物件都是在命名空間std中定義的,所以我們要使用標準函式庫中的函式或物件都要使用std來限定。
不連續的命名空間
命名空間可以定義在幾個不同的部分中,因此命名空間是由幾個單獨定義的部分組成的。乙個命名空間的各個組成部分可以分散在多個檔案中。
所以,如果命名空間中的某個組成部分需要請求定義在另乙個檔案中的名稱,則仍然需要宣告該名稱。
spring p命名空間 c命名空間
p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...
C 命名空間,也有叫命名空間
在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...