名字空間

在論壇中看到一段代碼,使用了名字空間,不明白,後去查了資料,總結如下:

隨着程序的複雜,應用程序將由多個源文件組成,而且多個開發者將開發和管理每個源文件,最後將組織和連接分開的多個文件以產生最終的應用程序。傳統地,文件管理要求所有源文件中的名字必須分離相同的全局名字空間,這些源文件沒有被封裝在限定的名字空間中(也就是說不限制其範圍,如函數體、類體、或轉換單元),因此在連接分開的模塊時,編譯器將發現名字的多個定義,此時需要用某種方法來區分每個名字。C++的namespace關鍵字提供瞭解決全局範圍的“名字衝突”問題的方法。關鍵字namespace允許把應用程序分成多個子系統,每個子系統能夠在自己的範圍內定義和操作,在子系統內每個開發者都 可方便地定義標識符,而不用擔心其他人是否也使用了相同的標識符,每個名字空間使用唯一的標識符。程序定義名字空間時,編譯器通過每個名字空間的唯一標識符而知道整個應用程序的子系統範圍。

使用C++的名字空間需要兩個步驟

第一步:namespace關鍵字唯一地標識一個名字空間

第二步:using關鍵字訪問以前標識的名字空間的元素

 

使用名字空間

namespace關鍵字用於結構、枚舉類型、聯合、或類的定義,其一般格式如下所示:

namespace name{

//object declarations

}

在自己的程序中,在名字空間定義內可包含編譯器所支持的任何類型的變量(CC++的簡單類型,或者以前定義的類、結構、聯合),同樣也可以定義函數,例如下面的代碼片斷在名字空間limited內申明瞭兩個變量和一個函數:

在上面的代碼片斷中,iksample函數是limited名字空間的一部分,因爲名字空間定義了一個範圍,所以必須使用作用域分辨符引用對象,這些對象在名字空間內定義。例如給變量k10,必須使用和下面相似的語句:

limited::k10

 

對名字空間用using語句

如果程序將頻繁地使用名字空間內的成員,則可用using語句簡化對這些成員的訪問,using語句有兩種格式,如下所示:

using namespace name;

using name::member

第一種格式允許訪問整個名字空間,第二種格式只能訪問名字空間中指定的成員。本質上,第一種格式使整個名字空間公有,第二種格式在名字空間中封裝某些成員。爲更好地理解using語句的兩種格式,仔細看下面的代碼片段,它使用了兩種格式:

using limited::k;    //only makes k visible

k=10;

using namespace limited;  //makes entire limited namespace visible

k=10;

using namespace std;語句

       using語句使程序訪問給定名字空間內的變量名,在這個特定的情況下,using語句使程序訪問std名字空間內的變量和類,std是標準模板庫的標準名字空間,不管程序什麼時候使用標準模板庫的構件,都必須包含using namespace std語句,否則編譯器不能確認是標準模板庫的類還是程序實用的其他類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章