C 學習(十)匿名命名空間

2021-09-24 04:10:18 字數 639 閱讀 5598

匿名的空間是c++用於替代使用static定義作用域為本編譯單元的全域性函式或全域性變數的一種新的替代方式,匿名空間與命名的命名空間一樣可以巢狀。由於匿名命名空間沒有命名空間的名字,所以也無法在其它的編譯單元內通過extern宣告該變數,於是該變數自然也只在本編譯單元內可見。

當定義乙個命名空間時,可以忽略這個命名空間的名稱:

namespce {

char c;

int i;

double d;

編譯器在內部會為這個命名空間生成乙個唯一的名字,而且還會為這個匿名的命名空間生成一條using指令。所以上面的**在效果上等同於:

namespace __unique_name_ {

char c;

int i;

double d;

using namespace __unique_name_;

使用匿名空間比使用static至少有兩個好處:

1) 對於一組多個識別符號函式只需要使用乙個匿名空間來宣告,不需要多次輸入static。

2) 可以巢狀。這樣可以在不同命名空間中使用多個同名的識別符號。

注意:命名空間都是具有external 連線屬性的,只是匿名的命名空間產生的__unique_name__在別的檔案中無法得到,這個唯一的名字是不可見的.。

C 匿名命名空間

當定義乙個命名空間時,可以忽略這個命名空間的名稱 namespce 編譯器在內部會為這個命名空間生成乙個唯一的名字,而且還會為這個匿名的命名空間生成一條using指令。所以上面的 在效果上等同於 namespace unique name using namespace unique name 在匿...

C 命名空間 預設命名空間與匿名命名空間

2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...

解決C 重定義問題 匿名命名空間

今天遇到乙個命名空間重定義的問題,程式框架大體如下 inte ce中定義的是乙個namespace,形式如下 namespade np 並且三個module 1,2,3 以及core模組全都需要引用這個命名空間中的資料 與訊息傳遞有關 並且這幾個模組是分別編譯的,最後鏈結起來,編譯module1,m...