C 學習之namespace的用法

2021-06-29 12:58:45 字數 1289 閱讀 9745

fish.h

#ifndef __test_header__fish__

#define __test_header__fish__

#include namespace ns_fish

#endif /* defined(__test_header__fish__) */

fish.cpp

#include #include "fish.h"

using namespace std;

//using namespace ns_fish;

void fish_show()

#endif /* defined(__test_header__cat__) */

cat.cpp

#include #include "cat.h"

//using namespace ns_cat;

using namespace std;

void cat_show()

如果按照以上方式組織**,編譯能夠通過,但是會出現鏈結錯誤,原因在於對cat_show函式和fish_show函式的定義前沒有加上各自的命名空間比如ns_fish::fish_show而是直接定義了fish_show函式,fish_show和ns_fish命名空間下的fish_show函式其實是兩個同名不同域的函式,所以在對main函式中fish_show和cat_show進行鏈結操作時會報錯說沒有對ns_fish::fish_show函式進行定義,所以在定義函式時需要加上各自的命名空間,那能不能用乙個using namespace來代替呢,省的每次寫都很麻煩,答案是不能的,因為如果你想定義兩個不同命名空間的同名函式的話,你在檔案前面用using namespace將這兩個命名空間都加進來,可是在定義函式的時候不加命名空間,函式又同名,引數甚至也相同,這個時候系統怎麼會知道你想定義哪個命名空間下的函式呢,所以不同於在main函式中呼叫時可以使用using namespace來減少**量,在定義時不能夠使用using namespace來定義函式(即函式呼叫可以用using namespace,而函式定義不行)。

如果在cat.cpp檔案中定義另乙個cat_show函式,該函式不在命名空間ns_cat下的話,mian中直接呼叫cat_show就會產生編譯錯誤,提示歧義,所以這時候就必須在呼叫時加上命名空間以示區分,而不能單獨用using namespace來區分。

最佳實踐:標頭檔案中不應該包含using宣告,因為這樣就會導致包含了該標頭檔案的其他檔案被迫使用了某個未知的命名空間,可能會導致意想不到的名字衝突問題。

c 學習筆記 namespace

c 為什麼要引入命名空間?假設有兩個班級,a班有位同學張三,b班也有位同學叫張三,因為某種原因,兩個班級需要合併,班級合併後就有兩個名叫張三的同學,老師需要點名同學回答問題時,那到底該誰起立回答呢?這就產生衝突了,通常的辦法可能是把年齡大的叫大張三,年齡小的叫小張三,這樣就能夠解決這個衝突了 而程式...

C 命名空間(namespace)學習

1 什麼叫 namespace?namespace 命名空間 是 c 提供的一種類的組織方式,將不同功能的類進行組織,管理。net framework 使用命名空間來組織它的眾多類 在較大的程式設計專案中,宣告自己的命名空間可以幫助控制類名稱和方法名稱的範圍。2 如何定義 namespace?nam...

C 語法學習二 NameSpace

命名空間的使用 net framework類庫由命名空間組成.每個命名空間都包含在程式中使用的型別 類,結構,列舉,委託和介面.using system namespace athrun namespacea namespaceb created by sharpdevelop.user admin...