日常啃書系列 命名空間總結

2021-10-05 12:51:00 字數 2227 閱讀 5457

唉,啃書後想著該寫點什麼(才不會承認是記性實在堪憂不得不寫……)

本篇沒有長篇**(真好……)

引入命名空間的意義:

最簡單的說,如我們所知,當隨著專案的增大,名稱相互衝突的可能性必然會增加,特別是使用多個廠商的類庫時,比如a庫和b庫都定義了 node類,但定義的方式不相容,使用者可能想用a庫而不想用b庫的node類,那麼問題來了,怎麼區分它們呢?

噹噹噹噹~ 命名空間的概念就被c++引入啦!

在具體說之前讓我們先弄明白一些名稱含義方便後文描述~

1.宣告區域and 作用域and 潛在作用域

說什麼都不如一張圖好使,直接上圖!

潛在作用域:

從宣告點開始,到其宣告區域的結尾

作用域:

即變數對於程式而言可見的範圍(因為變數在其潛在作用域中可能會被另乙個巢狀宣告的同名變數隱藏,或者說預設被覆蓋,但依然可以強制使用)

宣告區域:

可以在其中進行宣告的區域(廢話)如第乙個全域性宣告的num的宣告區域是該檔案,第二個num的宣告區域是main函式……

圖中的顏色區域顯示了每個被宣告的num的潛在作用域,作用域是未被比其作用優先順序高的num覆蓋的部分(優先順序為:黃 色< 綠色 《紅色)

2. using宣告 和 using編譯指令

using宣告:

使特定識別符號在整個作用域內可用
using編譯指令:
使整個命名空間的所有識別符號在整個作用域內可用
好啦,大概一些重要的概念先擺這,接下來看這些概念在**中的具體體現吧~1.作用域解析運算子 ::
std::cin >> a;   

std::cout << a;

std::cin >> a;

上面反映了該種方法的作用範圍,僅該次使用有效

2. using宣告
void su()

void ge()

3.using編譯指令: 配合關鍵字 namespace 使用
void su()

void ge()

啊~ 應該說清楚了吧……下面來看一看命名空間有哪些特性1.放置位置:
可以是全域性,也可以位於另乙個命名空間中,但是!!! 不能位於**塊中!!
全域性:namespace wang;

}int main()

巢狀 :

namespace yang……}

……}2.使用及其範圍:

(此處為補充,主要是using宣告與編譯指令的區別,說得多不如直接上**吧)

namespace yang

…… }namespace wang

struct person;}

namespace xiao

using

namespace yang::li;

// 內部名稱也可用

char age;

intmain()

3.建立別名:
namespace mfg = wang;  //mfg此處才宣告,wang已經宣告,此後mfg與wang等效
4.未命名的命名空間:

作用和內部靜態變數差不多,因為若是全域性宣告,其潛在作用域為從宣告點到該宣告區域末尾,從這個方面看和全域性變數類似,又由於沒有名字,外部無法進行呼叫,這又與static關鍵字宣告的全域性變數類似

static int a;

namespace

1.想必有人注意到前面的 using wang::fetch 只使用了名稱(沒有問題!),並沒有描述該函式的返回值型別或函式特徵,因此,如果該函式被過載,則該using 宣告將會匯入所有的版本

2.不要在標頭檔案中使用using編譯指令,這樣做首先會掩蓋了要讓哪些名稱可用,此外包含標頭檔案的順序可能影響程式的行為,如果你頭鐵非要使用using編譯命令,麻煩盡量將其放在所有預處理器編譯指令#include之後 !!!

2.匯入名稱時,優選作用域解析運算子或using宣告,命名空間的開放性意味著命名空間的名稱可能分散在多個地方,反正using的兩種使用與使用作用域解析運算子相比都會增加名稱衝突的可能性,但是……方便啊!

命名空間 總結

1.namespace解決了命名衝突問題 可以放 函式 變數 結構體 類 2.命名空間必須定義在全域性作用域下 3.命名空間可以巢狀命名空間 4.命名空間是開放的,可以隨時給命名空間新增內容。巢狀時可用 using namespace a b 匿名 命名空間 當定義乙個命名空間時,可以忽略這個命名空...

Python命名空間總結 「命名空間之禪」

python中的命名空間,在使用點號.和不使用點號.兩種情況下使用變數名時,會有不同的處理方式。賦值語句 var value 僅僅是建立或改變當前作用域變數名,除非使用了global或者nonlocal關鍵字 引用語句 var 搜尋路徑如下 l local 在當前作用域下搜尋變數名var e 在所有...

命名空間學習總結

分類 c 2011 05 12 11 35 288人閱讀收藏 舉報 1 using namespace 命名空間主要是為了解決在大的互相合作的工程中,出現像變數 函式 結構 列舉 類以及類和結構的成員的名稱相互衝突的可能。declaration region 宣告區域,是可以在其中進行宣告的區域。p...