內容來自C++ primer 5th函數
大型程序常常會使用多個獨立開發的庫,這些庫又會定義大量的全局名字,不可避免地會發生名字衝突的狀況。spa
命名空間:爲防止名字衝突提供了更加可控的機制。命名空間分隔了全局命名空間,其中每一個命名空間是一個做用域。經過在某個命名空間中定義庫的名字,能夠避免全局名字的衝突。生命週期
定義:作用域
namespace space_name{開發
//聲明和定義,只要能出如今全局做用域中的就能在命名空間中模板
//主要是類,變量,函數,模板,其餘命名空間變量
}命名空間
命名空間結束不用分號。程序
命名空間的名字也必須在定義它的做用域內保持惟一。im
命名空間不能定義在類和函數內部。
每一個命名空間都是一個做用域。
命名空間的定義能夠分紅幾個部分,不用一次性定義完。
好比:
namespace nsp{
}
多是定義了一個名字爲nsp的新命名空間,也多是爲已經存在的命名空間添加一些新成員。
模板特例化必須定義在原始模板所屬的命名空間中。
內聯命名空間
C++11新標準
和普通的嵌套命名空間不一樣,內聯命名空間中的名字能夠被外層命名空間直接使用,也就是說,不用在內聯命名空間的名字前加上表示該命名空間的前綴。
inline namespace space_name{
}
inline必須出如今命名空間第一次定義的地方,之後再打開命名空間的時候能夠寫inline,也能夠不寫。
未命名的命名空間
指關鍵字namespace後面直接是{}
未命名的命名空間中定義的變量擁有靜態生命週期:在第一次使用前建立,直到程序結束才銷燬。