namespace 名字空間

2021-07-02 20:06:05 字數 2860 閱讀 9512

namespace

中文意思是命名空間或者叫名字空間,傳統的

c++只有乙個全域性的

namespace

,但是由於現在的程式的規模越來越大,程式的分工越來越細,全域性作用域變得越來越擁擠,每個人都可能使用相同的名字來實現不同的庫,於是程式設計師在合併程式的時候就會可能出現名字的衝突。

namespace

引入了複雜性,解決了這個問題。

namespace

允許像類,物件,函式聚集在乙個名字下。本質上講

namespace

是對全域性作用域的細分。

我想大家都見過這樣的程式吧:

hello_world.c

#include

using 

namespace

std;

int main()

我想很多人對

namespace

的了解也就這麼多了

但是namespace

遠不止如此,讓我們再多了解一下

namespace

namespace

的格式基本格式是

namespace

identifier

舉個例子,

namespace

exp有點類似於類,但完全是兩種不同的型別。

為了在namespace

外使用namespace

內的變數我們使用::操作符,如下

exp::a

exp::b

使用namespace

可以有效的避免重定義的問題

#include

using 

namespace

std;

namespace

first

namespace

second

int main ()

結果是5

3.1416

兩個全域性變數都是名字都是var,但是他們不在同乙個

namespace

中所以沒有衝突。

關鍵字using可以幫助從

namespace

中引入名字到當前的宣告區域

#include

using 

namespace

std;

namespace

first

namespace

second

int main ()

輸出是5

2.7183

103.1416

就如我們所指定的第乙個x是first::x,y是second.y

using也可以匯入整個的

namespace

#include

using 

namespace

std;

namespace

first

namespace

second

int main ()

輸出是5

103.1416

2.7183

正如我們所預見的匯入的整個的first的

namespace

,前一對x,y的值就是first中的x,y的值。

這裡我們不能在「using 

namespace

first;「下加一句「using 

namespace

second;「,為什麼呢?

這樣做無異於直接完全的忽視

namespace

first和

namespace

second,會出現重複定義的結果,所以前面的hello_world.c中的using指令的使用一定程度上存在問題的,只是因為我們就用了乙個namspace,一旦引入了新的

namespace

這種做法很可能會出現重複定義的問題。

在標頭檔案中,我們通常堅持使用顯式的限定,並且僅將using指令侷限在很小的作用域中,這樣他們的效用就會受到限制並且易於使用。類似的例子有

#include

using 

namespace

std;

namespace

first

namespace

second

int main ()

return 0;

}輸出是

53.1416

可以看到兩個不同的

namespace

都被限制在了不同作用域中了,他們之間就沒有衝突。

namespace

也支援巢狀

#include

namespace

first 

void second::hello()

}int main()

輸出是1.02

hello world

在namespace

first中巢狀了

namespace

second,seond並不能直接使用,需要first來間接的使用。

namespace

可以使用別名,在對一些名字比較長的

namespace

使用別名的話,是一件很愜意的事。但是與using相同,最好避免在標頭檔案使用

namespace

的別名(f比first更容易產生衝突)。

namespace

f = first;

最後,namespace

提供了單獨的作用域,它類似於靜態全域性宣告的使用,可以使用未命名的

namespace

定義來實現:

namespace

//這裡的count是唯一的

//在程式的其它部分中count是有效的

void chg_cnt (int i)

namespace名字空間

考慮一種情況,當我們有兩個同名的人,zara,在同乙個班裡。當我們需要對它們進行區分我們必須使用一些額外的資訊和它們的名字,比如這個區域,如果它們生活在不同的區域或者它們的母親或父親的名字,等等。在您的c 應用程式中也會出現同樣的情況。例如,您可能正在編寫一些具有名為xyz 函式的 並且還有另乙個可...

namespace名字空間小解

一 標準名字空間的理解 using namespace std 就是標準名字空間的引用,std是c 標準庫中的名字空間名稱。大家都知道,當我們定義了乙個類,而宣告物件的時候就要用到 class name 後跟物件名稱,標準名字空間也是這個用法。其實,我們可以按照乙個更為抽象包含更廣的類來理解標準名字...

HDFS名字空間(NameSpace)

目標 掌握什麼是 名字空間 hdfs 支援傳統的層次型檔案組織結構。使用者或者應用程式可以建立目錄,然後將檔案儲存在這些目錄裡。檔案系統名字空間的層次結構和大多數現有的檔案系統類似 使用者可以建立 刪除 移動或重新命名檔案。namenode 負責維護檔案系統的名字空間,任何對檔案系統名字空間或屬性的...