C Primer Plus的若干收穫 (七

2021-06-22 23:09:10 字數 1808 閱讀 5829

這篇博文主要講了命名空間,說實話在接觸之前一直對這方面很感興趣,現在來好好的學習一番。

7.1 新的命名空間特性

c++新增了這樣一種功能,即通過定義一種新的宣告區域來建立命名的命名空間,這樣做的目的之一是提供乙個宣告名稱的區域。乙個命名空間的名稱不會與另外乙個空間的名稱發生衝突,同時允許程式的其他部分使用該名稱中宣告的東西。比如,下面的**使用關鍵字namespace建立了命名空間:

namespace jack;}

namespace jill

double fetch;

int pal;

struct hill;

}

可以通過作用域解析符來::來訪問命名空間的名稱

jack::pail=12.34;

jill::hill mole;

7.2 using宣告和using編譯指令

我們不希望每次使用命名空間的時候都對其進行限定,因此c++提供了兩種機制(using宣告和using編譯指令)來簡化對命名空間的使用。using宣告有被限定的名稱和它前面的關鍵字using組成;它將特定的名稱加在它所屬的宣告區域中,比如

int main()

另外,在函式外面使用using時會把名稱新增到全域性的命名空間中。using宣告使乙個名稱可用,而using編譯指令是所有的名稱都可用。using編譯指令有命名空間名和它前面的關鍵字using namespace組成,它是命名空間的所有名稱都可用,而不需要使用作用域解析符,如下面的**

using namespace jack;

#includeusing namespace std;

7.3 using宣告與using編譯指令之間的比較

使用using編譯指令匯入乙個命名空間的所有名稱與使用多個using宣告是不一樣的,而更像是大量使用作用域解析運算子。使用using宣告,就好像宣告了相應的名稱一樣。比如某個名稱已經出現在函式中宣告了,則不能使用using宣告匯入相同的名稱。然而,使用using編譯指令時,將進行名稱解析。如果使用using編譯指令匯入乙個已經存在函式中宣告的名稱,則區域性名稱將隱藏命名空間名,就像隱藏同名的變數一樣。

namespace jill;

char fetch;

int main()

同7.2我們可以簡單的發現如果試圖使用using宣告將命名空間匯入該宣告區域,則這兩個名稱會發生衝突,從而出錯。如果使用using編譯指令將該命名空間的名稱匯入該宣告區域,則區域性版本將隱藏名字空間版本

7.4 命名空間的其他特性

可以講命名空間進行巢狀

namespace elsements

float water;

}

這裡flame指得是element::fire::flame.同樣也可以使用編譯指令using namespace elsements::fire;

另外我們還可以這樣命名名字空間

namespace myth

7.5 名字空間及其前途

下面是當前的一些指導原則

好了,命名空間大概就講這麼多了。之後就要進入類這個概念了,這一部分很重要,要好好寫啊。

C Primer Plus的若干收穫 (二)

哎,真是不想吐槽考駕照的艱辛歷程了。跑到大西郊,頂著大太陽,一天就能摸上個十幾分鐘二十分鐘的車,簡直不要太坑爹,這兩天真是做的我屁股疼的不行。今天果斷不去了。只可惜我的大阿根廷啊,堅持到最後功虧一簣惜敗於德國,枉我四點自然醒起來看了接下來的比賽。不能不佩服諾伊爾,拉姆,博阿滕組成的後防線,讓阿根廷整...

C Primer Plus的若干收穫 (三)

有時候懷疑真是懷疑自己走的路到底是不是正確的。作為乙個土生土長數學系學生,卻對數學毫無興趣,沒事的時候就喜歡躲在圖書館看看有關計算機的書。有時候期末考試時候會掛個一兩門的數學專業課,有時候真希望數學課本上這乙個個繁瑣的證明是用 寫的。自己幾乎丟掉了本專業的一切,去全身心投入到計算機這一龐大而繁瑣的學...

C Primer Plus的若干收穫 (四)

經過半個月的辛苦的學習,終於把那個該死的科目三給考過去了,真是太煎熬啊。又被曬黑了,不知道又要捂多久才能重新變過來。不過,好在自己抽空能夠看下c 時間也不算太難過。馬上要回學校了,一看自己才寫了三篇博文,簡直不能忍了。最近要加把油啊,一會學校事情可就多了。1.1 檔案尾條件 如果輸入來自於檔案,則存...