C 匿名名字空間

2022-05-22 17:03:14 字數 952 閱讀 5356

**:

名字空間(namespace),是c++提供的乙個解決符合名字衝突的特性。標準規定,在不同名字空間中命名相同的符號,代表不同的實體。通常,利用定義名字空間的辦法,可以使模組劃分更加方便,減少模組間的相互影響。

通常定義乙個名為mynamespace的名字空間,其形式為:

1namespace mynamespace

2如果不寫mynamespace,在c++裡也是允許的,這就是匿名名字空間。按照標準的描述,匿名名字空間等價於:

1namespace unique

24usingnamespace unique;

這裡的unique由編譯器決定,並保證這是乙個在程式裡唯一的名字空間。

因此,可以看出,匿名名字空間具有乙個很有用的特性,那就是,對於不同的編譯單元(cpp檔案),「同乙個」匿名名字空間中的物件,會被當作不同的實體。而這個特性和全域性的static修飾是一致的。那這能帶來什麼好處呢?原有的static不是很好用的嗎?

是的,static修飾,在處理函式和變數(包括常量)的時候已經工作得很好了。但是static的缺陷是不能修飾class和struct這樣的結構定義。因此,當出現這種情況:

在某個cpp實現裡需要輔助的幾個結構a,b,c來幫助實現,但是又不希望這些結構汙染整個名字空間。這時一般有如下兩種解決辦法:

1)定義乙個不常用的名字空間,將a, b, c 放入其中。

這樣,需要程式設計師自己保證名字空間的名字唯一。

2)使用類內部結構體定義。

這樣,如果結構比較複雜,比如,有靜態成員,就行不通了。而且如果這些結構不是乙個類獨自使用而需要幾個類共享,處理起來也比較麻煩。

這時,如果使用匿名名字空間,就可以比較完美解決問題了。

【總結】: 匿名名字空間提供了類似在全域性函式前加 static 修飾帶來的限制作用域的功能。它的這種特性可以被用在struct和class上, 而普通的static卻不能。

匿名名字空間

名字空間 namespace 是c 提供的乙個解決符合名字衝突的特性。標準規定,在不同名字空間中命名相同的符號,代表不同的實體。通常,利用定義名字空間的辦法,可以使模組劃分更加方便,減少模組間的相互影響。通常定義乙個名為mynamespace的名字空間,其形式為 1 namespace myname...

C 名字空間

namespace 名字空間名 注 名字空間成員可以是全域性變數 全域性函式 型別 名字空間 作用域限定操作符 名字空間名 要訪問的成員 include namespace nm1 namespace nm2 intmain 當名字沒有重複的時候,我們可以簡化 方法一 名字空間指令 格式 using...

c 名字空間指令與名字空間宣告

在使用任何名字空間之前,編譯器必須能夠找到他,即確定他的宣告所在的作用域。使用某個名字空間中的名字最簡單的方式就是使用限定名字,即把名字空間的名字 如ns1 作為字首,然後加上作用域操作符 然而又是可能不願使用名字空間以追求 簡潔。可以通過下面實現 1.使用using指令 如 using names...