命名空间 namespace
C++中有兩個比較基礎又重要的概念,一個是作用域,另一個是生存期。作用域顧名思義就是作用的區域,分為函數原型作用域、局部作用域、類作用域和命名空間作用域,它們的作用范圍按此順序變大。生存期顧名思義就是變量從創建到消亡的這段時間,分為靜態生存期和動態生存期。如果變量的生存期與系統程序的運行期相同,則該變量就具有靜態的生存期。在所有大括號對之外定義的變量具有靜態生存期,命名空間作用域都在大括號外,所以其變量具有靜態生存期。在局部作用域中用static聲明的變量也具有靜態生存期。除了這兩種情況之外的變量都具有動態生存期。
命名空間建立了一些相互隔離的作用域,且這些作用域里的變量都具有靜態生存期。
namespace產生的原因
C++中采用的是單一的全局變量命名空間。在這單一的空間中,如果有兩個變量或函數的名字完全相同,就會出現沖突。命名空間就是ANSIC++引入的可以由用戶命名的作用域,用來處理程序中常見的同名沖突。
如果在頭文件head1.h定義了全局變量string user_name;然后再在頭文件head2.h也定義了string user_name,或者調用的某個庫中已經定義了這個全局變量,系統在編譯的時候就會報重復定義的錯誤。這個時候可以用extem?string user_name來解決編譯問題,但這個時候string user_name的作用域就從head1.h擴展到了head2.h,也許這并不是我們想要的情況,我們或許想要得到的是兩個不同的全局變量,只是名字一樣而已。
namespace使用
使用時先把變量定義在兩個不同的命名空間中。
namespace XXX
{
string user_name;
}
?
namespace YYY
{
string user_name;
}
然后通過命名空間限定讀取:
XXX::user_name="asd";?
YYY::user_name="qwe";
?
一個命名空間中可以包括:變量(可以帶有初始化);常量;數(可以是定義或聲明);結構體;類;模板和命名空間(在一個命名空間中又定義一個命名空間,即嵌套的命名空間)。但命名空間中不可以包含命令行,如#include,不然會報錯。
使用時可以包含整個命名空間using namespace XXX; 也可以只包含其中的某個變量using XXX::user_name; 這樣可以減少編譯的大小。
轉載于:https://www.cnblogs.com/zhengxinwei/p/7471529.html
總結
以上是生活随笔為你收集整理的命名空间 namespace的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习笔记 -- 列表2: 遍
- 下一篇: Element ui select同时获