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...