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