第17章 用於大型程式的工具 10

2021-06-02 20:42:33 字數 1218 閱讀 9861

17.2.4 命名空間成員的使用

除了在函式或其他作用域內部,標頭檔案不應該包含using指示或using宣告。在其頂級作用域包含using指示或using宣告的標頭檔案,具有將該名字注入包含該標頭檔案的檔案中的效果。標頭檔案應該只定義作為其介面的一部分的名字,不要定義在其實現中使用的名字。

1. using宣告,扼要重述

乙個using宣告一次只引入乙個命名空間成員,它使得無論程式中使用哪些名字,都能夠非常正確。

using std::vector;

using std::string;

2. using宣告的作用域

using宣告可以出現在全域性作用域、區域性作用域或者命名空間作用域中。類作用域中的using宣告侷限於被定義類的基類中定義的名字。

class book

};class notebook:private book;

3. 命名空間別名

命名空間別名宣告以關鍵字namespace開頭,接(較短的)命名空間別名名字,再接=,再接原來的命名空間名字和分號。如果原來的命名空間名字是未定義的,就會出錯。

命名空間別名也可以引用巢狀的命名空間。

namespace vec=anders::namespace1;

vec::class1 c1();

乙個命名空間可以有許多別名,所有別名以及原來的命名空間名字都可以互換使用。

4. using指示

像using宣告一樣,using指示使我們能夠使用命名空間名字的簡寫形式。與using宣告不同,using指示無法控制使得哪些名字可見——它們都是可見的。

5. using指示的形式

using指示以關鍵字using開頭,後接關鍵字namespace,再接命名空間名字。如果該名字不是已經定義的命名空間名字,就會出錯。

using指示使得特定命名空間的所有名字可見,沒有限制。短格式名字可從using指示點開始使用,直到出現using指示的作用域的末尾。

using namespace std;

using namespace anders::namespace2;

6. using指示與作用域

using指示不宣告空間成員名字的別名,相反,它具有將命名空間成員提公升到包含命名空間本身和using指示的最近作用域的效果。

using指示有用的一種情況是,用在命名空間本身的實現檔案中。

第17章 用於大型程式的工具 9

17.2.3 未命名的命名空間 命名空間可以使未命名的,未命名的命名空間 unnamed namespace 在定義時沒有給定名字。未命名的命名空間以關鍵字namespace開頭,接在關鍵字namespace後面的是由花括號定界的宣告塊。未命名的命名空間與其他命名空間不同,未命名的命名空間的定義區域...

第17章 用於大型程式的工具 14

17.3.2 轉換與多個基類 在單個基類情況下,派生類的指標或引用可以自動轉換為基類的指標或引用,對於多重繼承也是如此,派生類的指標或引用可以轉換為其任意基類的指標或引用。namespace animal class endangered class bear public zooanimal cl...

第17章 用於大型程式的工具 14

17.3.2 轉換與多個基類 在單個基類情況下,派生類的指標或引用可以自動轉換為基類的指標或引用,對於多重繼承也是如此,派生類的指標或引用可以轉換為其任意基類的指標或引用。在多重繼承情況下,遇到二義性轉換的可能性更大。編譯器不會試圖根據派生類轉換來區別基類間的轉換,轉換帶每個基類都一樣好。names...