名字空間允許我們封裝名字,否則的話,這些名字就有可能污染到全局的名字空間(pollute teh global namespce).一般來(lái)說(shuō),只有我們希望我們的代碼被外部軟件開發(fā)部門使用的時(shí)候。才會(huì)用到名字空間。
例如;我們可以這樣來(lái)封裝Array類,
namespace cplacple_primer_3E
{
 template <calss eyemly>
 calss Array{,,,,,,,,,};
////////////////////////

}
namespce后面的名字標(biāo)明了一個(gè)名字空間。它獨(dú)立于全局名字空間。我們可以在里面放一些希望聲明在函數(shù)和類之外的實(shí)體。名字空間并不改變他們的聲明意義。只是改變了它們的可視性。如果名字空間中的聲明對(duì)于程序來(lái)說(shuō)不是立即可見的。那么我們雜樣來(lái)訪問(wèn)他們呢?我們就要用到限定修飾名字符.
格式如下:
namespce_idenerfier::entrityname
名字空間別名(namespce alias)允許用一個(gè)可替代的,短的,或者跟一般的名字來(lái)和名字空間來(lái)關(guān)聯(lián)起來(lái)。
例如:
//提供一個(gè)更一般化的名字
namespce lib=cplacple_primer_3E
然后這個(gè)名字就會(huì)稱為原始名字空間的同義詞。
#include "cplacple.h"
int main()
{
 lib::Array{...........}

 }
別名也可以 用來(lái)封裝正在使用的實(shí)際的名字空間。在這種情況下,我們可以通過(guò)改變別名的名字空間。
來(lái)改變所使用的聲明集。而無(wú)需改變“通過(guò)別名來(lái)訪問(wèn)這些聲明”。的實(shí)際代碼。
using 指示符使名字空間中的所有的聲明都是可見得。這樣這些聲明可以不加任何的限定的使用。
using和namespce都是關(guān)鍵字。被引用的名字空間必須已經(jīng)被聲明了。否則的話,會(huì)引起編譯的錯(cuò)誤。

using 聲明提供了更為精細(xì)的名字可視化機(jī)制。它允許使名字空間中的單個(gè)的聲明可見。
例如:
#include"IBM_Canada_Labaraory.h"
using  namespace IBM_Canada_Labaraory::Matriy
int main()
{
 //ok; IBM_Canada_Labaraory::Matriy

Matriy met(4,5);
//fail,錯(cuò)誤。IBM_Canada_Labaraory::Array不可見
Array array(4,5);
}
為了防止標(biāo)準(zhǔn)的c++庫(kù)組件污染用戶定義的名字空間。所有的c++庫(kù)組件都聲明在一個(gè)稱為std的名字空間中。
所以即使我們?cè)谖覀兊奈谋疚募幸呀?jīng)包含了c++庫(kù)頭文件,頭文件中聲明的內(nèi)容在我們的文本文件中也是不可見的。
例如:
在c++中下面的代碼是不能被編譯通過(guò)的。
#include<string>
///錯(cuò)誤。string 是不可見的
string  current_string="asdf dfdff";
在string 頭文件中所有的聲明都包含在std名字空間中。
我們可以用“#include 指示符后面加上using 的辦法使在<string>中的,在std中聲明的組件,對(duì)于我們的文本文件是可見得。
例如:
#include<string>
 using namespace std
int main()
{
 //////////正確。string 是可見的。
  string current_string="asd fdfdf"
}
為了使在std中,聲明的組件和名字在我們的文本文件中可見。using指示符通常被看作是一種比較差的選擇方案。
在上面的例子中。指示符using ,使在string頭文件中聲明的,并且在std名字空間中的  組件在我們的文本文件中都是可見的。這又將全局名字空間污染問(wèn)題帶回來(lái)了。而這個(gè)問(wèn)題就是std名字空間首先要努力避免的。
它增加了“c++標(biāo)準(zhǔn)庫(kù)組件的名字”與“我們程序中聲明的全局名字”沖突的機(jī)會(huì)。
現(xiàn)在有兩種機(jī)制可以替代using指示符。來(lái)引用隱藏在std名字空間中的名字string.
第一種方法:
 可以使用限定的名字。
  #include<string>
/////正確。使用限定的名字
   std:: string current_string="afdfdfsdfs";
第二種方法:
 如下使用using 聲明;
#include<string>
 using std::string;
 /////ok.上面的using聲明使string可見。
 string=“dfdfdfafsdf”;
為了使用名字空間中的聲明的名字。最好使用帶有精細(xì)選擇功能的 using聲明替代using 指示符。