C/C++之C++命名空间
(1)命名空間可以是不連續的而且允許多層嵌套
1、一個命名空間可以分散定義在一個文件的多個地方,分開的命名空間相互補充。
測試1
2、一個命名空間可以分散定義在多個文件中。命名空間可以不連續意味著可以用分離的接口文件和實現文件構成命名空間(類的定義和實現)。例如下面的MyClass類,雖然都在一個命名空間MyClassSpace中,但是,這仍然是兩部分,不要以為在main里面會在MyClassSpace中找到變量b。
測試2
(2)命名空間的別名
測試3
(3)using 聲明和using編譯指令
1、使用using 聲明
使用using聲明后,只能使用被聲明的成員。
測試4
2、使用using編譯指令
使用using編譯指令后,該命名空間中的所有成員就都包含到當前文件中了。
測試5
使用using namespace也有一定的壞處,如下
using全局與局部的區別
using語句可以在函數外邊以全局的方式引用,例如經常出現的 using namepace std;;也可以以局部的方式出現函數中,兩者的區別在于:using后的成員的作用域不同。
(5)匿名命令空間
當聲明命名空間時的名稱為空時,則該命名空間為匿名命名空間(unnamed namespace)。匿名的空間是C++用于替代使用static定義作用域為本編譯單元的全局函數或全局變量的一種新的替代方式,匿名空間與命名的命名空間一樣可以嵌套。由于匿名命名空間沒有命名空間的名字,所以也無法在其它的編譯單元內通過extern聲明該變量,于是該變量自然也只在本編譯單元內可見。可以通過::member_name引用匿名命名空間的成員。
使用匿名空間比使用static至少有兩個好處:
1) 對于一組多個標識符函數只需要使用一個匿名空間來聲明,不需要多次輸入static。
2) 可以嵌套。這樣可以在不同命名空間中使用多個同名的標識符。
在C++的標準中也建議使用匿名命名空間定義編譯單元內部的全局變量,替代static。static關鍵詞在此處被認為是過期的(deprecated)特性。
(6)std命名空間
標準C++把自己的整個庫定義在std命名空間中。
總結
以上是生活随笔為你收集整理的C/C++之C++命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++之Gcc常用参数
- 下一篇: C/C++ 之 应用程序的编译过程