總目錄 > 1 語言基礎 > 1.4 c++ 語言基礎 > 1.4.4 命名空間
前言
可能是目前最簡短的一篇?因為實在不知道可以和哪一篇一起講了。
更新日誌
20200903- 增加作用域和全域性/區域性變數的介紹。
20211023 - 作用域、全域性/區域性變數等內容移至
1.2 c 語言高階。
1.4.4 命名空間
c++ 另一大特性 ——命名空間(namespace),用來解決複雜專案中名字可能出現衝突的問題——比如某專案由 jk 和 bebe 共同完成,而他倆在定義變數名時總是重複,比如都使用了 vis 作為標記陣列,那麼就可以使用 namespace 來對各自的工作空間進行切割:
1 #include 23namespace
jk 6
7namespace
bebe
1011
intmain()
當然並非每次都需要強調這是誰的 vis。使用 「using namespace 」 + 空間名,相當於是劃分地盤:
1 #include 23namespace
jk 6
7namespace
bebe
1011
intmain()
這裡表示,主程式這一塊都是 jk 的,jk 住在這裡了,那麼他自己的東西就不用再強調是誰的了,vis[1] 等價於 「jk :: vis[1]」,而外人 bebe 仍需標明。
所以,平時競賽最常用的using namespace std是指什麼?是 c++ 預設提供的一套標準命名空間,裡面包含 cin, cout, endl, ... 等等。
當然,除了上述這樣允許訪問某命名空間的任何成員,也可以選擇僅訪問其中乙個成員,比如 using std :: cin,等等。
在命名空間中可以使用作用域限定符::,關於作用域請參見1.2 c 語言高階的作用域與儲存類別部分;
這是 c++ 特有的符號,以解決區域性變數與全域性變數同名時全域性變數會被遮蔽的問題;
如果我們對某個變數指定了作用域,編譯器就會忽略更外層作用域的同名實體。
有關命名空間的知識點
命名空間只有乙個屬性 name 它是 namespace.system.class 的乙個例項,name 不能包括頭綴和字尾的下劃線.命名空間之間可以相互聯絡和組織成乙個由類和類的例項構成的的網狀結構.可以是這樣 namespace1 namespace2 namespace3 namespace ...
有關命名空間的知識點
命名空間只有乙個屬性 name 它是 namespace.system.class 的乙個例項,name 不能包括頭綴和字尾的下劃線.命名空間之間可以相互聯絡和組織成乙個由類和類的例項構成的的網狀結構.可以是這樣 namespace1 namespace2 namespace3 namespace ...
C 知識點 命名空間 預設引數 過載
1.什麼是c 2.c 與c語言的差異 3.c 中的命名空間例 namespace s1namespace s2int main 4.預設引數int add1 int x,int y,int z 沒有預設值 int add2 int x,int y,int z 3 半預設 int add3 int x...