C++中namespace的理解與實踐__C++

來源:互聯網
上載者:User
1.前言
namespace中文意思是命名空間或者叫名字空間,傳統的C++只有一個全域的namespace,但是由於現在的程式的規模越來越大,程式的分工越來越細,全域範圍變得越來越擁擠,每個人都可能使用相同的名字來實現不同的庫,於是程式員在合并程式的時候就會可能出現名字的衝突。 namespace引入了複雜性,解決了這個問題。namespace允許像類,對象,函數聚集在一個名字下。 本質上講namespace是對全域範圍的細分
一個典型執行個體:
#include <iostream>using namespace std;int main(){    printf("hello world !");    return 0;}
這可能是我們最先接觸namespace的代碼。然而,namespace的功能不止如此。 namespace的格式基本格式是:
namespace identifier{    entities;}
例如:
namespace exp{    int a,b;}
有點類似於類,但完全是兩種不同的類型。
為了在namespace外使用namespace內的變數我們使用::操作符,如exp::a、exp::b。使用namespace可以有效避免重定義的問題。 2.避免重定義問題
#include <iostream>using namespace std;namespace first{  int var = 5;}namespace second{  double var = 3.1416;}int main () {  cout << first::var << endl;  cout << second::var << endl;  return 0;}
結果是:5   3.1416。兩個全域變數名字都是var,但是他們不在同一個namespace中所以沒有衝突。 從這裡我們也能看出來,namespace最大的作用在於,可以很好地解決重複定義問題。
2.1 using可以匯入整個的namespace
#include <iostream>using namespace std;namespace first{  int x = 5;  int y = 10;}namespace second{  double x = 3.1416;  double y = 2.7183;}int main () {  using namespace first;  cout << x << endl;  cout << y << endl;  cout << second::x << endl;  cout << second::y << endl;  return 0;}
輸出是:5,10,3.1416,2.7183; 正如我們所預見的匯入的整個的first的namespace,前一對x,y的值就是first中的x,y的值。
這裡我們不能在“using namespace first;“下加一句“using namespace second;“,為什麼呢。
這樣做無異於直接完全的忽視namespace first和namespace second,會出現重複定義的結果,所以前面的hello_world.c中的using指令的使用一定程度上存在問題的,只是因為我們就用了一個namspace,一旦引入了新的namespace這種做法很可能會出現重複定義的問題。 2.2 支援顯示的限定方法 在標頭檔中,我們通常堅持使用 顯式的限定,並且僅將using指令局限在很小的範圍中,這樣他們的效用就會受到限制並且便於使用。類似的例子:

#include <iostream>using namespace std;namespace first{  int x = 5;}namespace second{  double x = 3.1416;}int main () {  {    using namespace first;    cout << x << endl;  }  {    using namespace second;    cout << x << endl;  }  return 0;}
輸出是:5,3.1416;可以看到 兩個不同的namespace都被限制在了不同範圍{}中了,這就沒有衝突。 3.參考資料 [1]《C++必知必會》 [美]Stephen C.Dewhurst 著,榮耀譯 
[2]  http://www.cplusplus.com/doc/tutorial/namespaces.html
[3]《C++精粹》     [美]Ira Pohl 著 王樹武 陳朔鷹 等譯 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.