namespace的作用及用法


namespace

  所謂namespace,是指標識符的可見范圍。C++標准庫中的所有標識符都被定義在一個名為 std 的namespace 中。

一、<iostream>和<iostream.h>格式不一樣,前者沒有后綴。實際上,在你自己編譯器的include路徑下,你可以看到這兩個是兩個不同的文件,而且打開后里面的代碼也不同。后綴為 .h 的頭文件C++標准以明確提出不支持了,C++標准為了與C區分開,也為了能夠正確的使用命名空間,規定了頭文件不適用后綴 .h 。因而

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

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

二、 由於namespace的概念,使用C++標准庫中的標識符時,有以下三種方式:

  1、直接在標識符前加上命名空間std : 例如 std :: << cout << std :: hex << 3.1415 << std :: endl ;

  2、用 using 關鍵字指定部分標識符的命名空間:using std :: cout ; using std :: endl ; 那么1中的語句可以改寫為 cout << std :: hex << 3.1415 << endl ;

  3、最方便的就是使用 using namespace std ; 讓命名空間 std 內的所有標識符都有效 。好像把他聲明成全局函數一樣,這樣上面的代碼就可以寫成 cout << hex << 3.1415 << endl ;

三、命名空間的定義

namespace name { ... } ;

 

四、命名空間的使用

#include <iostream>
using namespace std;
​
namespace namespaceA
{
    int a = 0 ;
    namespace namespaceD
    {
        int b;
    }       
}
​
namespace namespaceB
{
    int a = 0 ;
    namespace namespaceC
    {
        int b;
    }
}
​
int main()
{
    using namespace namespaceA;
    using namespace namespaceB;
    cout << a << endl;  
}

 

這樣編譯,會報錯,提示你 a 的命名空間不明確,改成以下即可正確運行:

cout << namespaceA :: a << end ;
cout << namespaceB :: a << end ;

 

注意,namespace的定義可以嵌套,比如要訪問 namespaceC 中的 b 可以這樣寫

using namespace namespaceB::namespaceC;
cout << b << endl ;  //這樣就可以訪問 namespaceC 中的 b 了;

 

 


免責聲明!

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



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