1. 程式人生 > >namespace的作用及用法

namespace的作用及用法

所有 編譯 names 關鍵字 運行 exp div 能夠 例如

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 了;

namespace的作用及用法