C 無名命名空間詳解

2021-07-04 18:06:28 字數 653 閱讀 7437

將一組宣告包裹在乙個命名空間中就是為了避免可能的名字衝突,保持**的區域性性。

例如,一段**示例:

#include "header.h"

namespace mine

int g()

}

但是有時我們並不希望名字mine被區域性的環境之外知道,此時名字mine似乎多餘了,因此我們可以省去這個mine名字 直接改寫為:

#include "header.h"

namespace

int g()

}

以上也是合法的。但是,我們也必須存在某種方式,使我們可以從乙個無名的命名空間之外訪問其中的成員。因此,無名命名空間有乙個隱含的使用指令。上面無名形式的宣告等價於:

#include "header.h"

namespace $$$

int g()

}using namespace $$$;

其中$$$是在這個命名空間定義所在的作用域裡具有惟一性的名字,特別地,不同編譯單位裡無名命名空間也互不相同。

正如期望中那樣,定義無名命名空間後,外部環境將無法說出無名命名空間的成員名字,即不讓外界知道我的內部成員及呼叫。

無名的命名空間

以上介紹的是有名字的命名空間,c 還允許使用沒有名字的命名空間,如在檔案a中宣告了以下的無名命名空間 namespace 命名空間沒有名字 void fun 定 義命名空間成員 cout ok 由於命名空間沒有名字,在其他檔案中顯然無法引用,它只在本檔案的作用域內有效。無名命名空間的成員fun函式的...

c 中無名命名空間的使用

突然使用到無名命名空間,查詢後,記錄 命名空間是程式設計者命名的記憶體區域,程式設計者根據需指定一些有名字的空間域,把一些全域性實體分別存放到各個命名空間中,從而與其他全域性實體分隔開。通俗的說,每個名字空間都是乙個名字空間域,存放在名字空間域中的全域性實體只在本空間域內有效。名字空間對全域性實體加...

命名空間詳解(c )

假設我班有倆個同學,一男一女都叫eric,但是如果他倆同時在我面前我只叫eric的話,他倆會不知道我在叫他倆哪位?同樣的,我們將這種現象放在 中。程式設計師對物件命名的時候,一般都會起一些有意義的名稱。在一段 中會現很多的實體,這些實體可能擁有不同的功能,但是他們有同樣的名稱。但是,c 中採用的是單...