C++中的namespace


最近正在學習C++,對namespace的概念頗為好奇,但網上資料很零散,又不願意去翻那本厚厚的C++ Primer Plus。遂自己試驗。

1. <iostream>和<iostream.h>是不一樣,前者沒有后綴,實際上,在你的編譯器include文件夾里面可以看到,二者是兩個文件,打開文件就會發現,里面的代碼是不一樣的。

后綴為.h的頭文件c++標准已經明確提出不支持了,早些的實現將標准庫功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標准為了和C區別開,也為了正確使用命名空間,規定頭文件不使用后綴.h。

因此,當使用<iostream.h>時,相當於在c中調用庫函數,使用的是全局命名空間,也就是早期的c++實現;

當使用<iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。

以上來自http://www.jb51.net/article/40018.htm

2.namespace的作用

減少大型軟件的變量函數和類重名的問題。每個namespace都可以隨意命名變量,不用擔心沖突;

namespace space1{

int x;

}

namespace space2{

int x;

}

  

namespace里亦可添加函數

namespace space1{

int x;

}

namespace space1{

void alert(){

    std::cout<<"hello";

}
}

  

3.如何調用namaspace里的成員

一次性調用所有的 using namespace xxx;

調用其中某些成員

xxx::member

xxx::function()

比如標准庫里

std::cout<<"";

using namespace std;

cout<<"";

 

4.namespace的作用域

#include <iostream>

using namespace std;

int main(){

    int name = 8;

    cout << name;

    system("pause");

}

  

其中std里的成員可在全局被調用。但如果using一行在main內,則外部函數定義中不可使用相關內容。

5.namespace的嵌套

譬如以下定義

namespace layer1{

    int x;

    namespace layer2{

        int y;

    }

}

  

 

如何調用layer2中的內容?

using namespace layer1;

using namespace layer2;

  

如果順序反過來便會報錯;

或者采用

Layer1::layer2::x

的方法來局部調用;

6.如果已經引入namespace后又聲明了相同的變量,則使用新聲明的變量。

#include <iostream>

using namespace std;

namespace test{

    int name = 4;

}

 

int main(){

    using namespace test;

    int name = 8;

    cout << name;

    system("pause");

}

  

該程序運行結果為8。

7.未命名的namespace

namespace {

int x;

}

  

等效於

static int x;

默認值都已經初始化為0。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM