筆記:C++命名空間

內容來自C++ primer 5th函數

       大型程序常常會使用多個獨立開發的庫,這些庫又會定義大量的全局名字,不可避免地會發生名字衝突的狀況。spa

       命名空間:爲防止名字衝突提供了更加可控的機制。命名空間分隔了全局命名空間,其中每一個命名空間是一個做用域。經過在某個命名空間中定義庫的名字,能夠避免全局名字的衝突。生命週期

 

定義:作用域

namespace space_name{開發

  //聲明和定義,只要能出如今全局做用域中的就能在命名空間中模板

  //主要是類,變量,函數,模板,其餘命名空間變量

}命名空間

命名空間結束不用分號。程序

命名空間的名字也必須在定義它的做用域內保持惟一。im

命名空間不能定義在類和函數內部。

每一個命名空間都是一個做用域。

 

命名空間的定義能夠分紅幾個部分,不用一次性定義完。

好比:

namespace nsp{
}

多是定義了一個名字爲nsp的新命名空間,也多是爲已經存在的命名空間添加一些新成員。

 

模板特例化必須定義在原始模板所屬的命名空間中。

 

內聯命名空間

C++11新標準

和普通的嵌套命名空間不一樣,內聯命名空間中的名字能夠被外層命名空間直接使用,也就是說,不用在內聯命名空間的名字前加上表示該命名空間的前綴。

inline namespace space_name{

}

inline必須出如今命名空間第一次定義的地方,之後再打開命名空間的時候能夠寫inline,也能夠不寫。

 

未命名的命名空間

指關鍵字namespace後面直接是{}

未命名的命名空間中定義的變量擁有靜態生命週期:在第一次使用前建立,直到程序結束才銷燬。

相關文章
相關標籤/搜索