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

2021-06-02 20:41:31 字數 995 閱讀 5038

17.2.3 未命名的命名空間

命名空間可以使未命名的,未命名的命名空間(unnamed namespace)在定義時沒有給定名字。未命名的命名空間以關鍵字namespace開頭,接在關鍵字namespace後面的是由花括號定界的宣告塊。

未命名的命名空間與其他命名空間不同,未命名的命名空間的定義區域性於特定檔案,從不跨越多個文字檔案。

未命名的命名空間可以在給定檔案中不連續,但不能跨越檔案,每個檔案有自己的未命名的命名空間。

未命名的命名空間用於宣告區域性於檔案的實體。在未命名的命名空間中定義的變數在程式開始時建立,在程式結束之前一直存在。

未命名的命名空間中定義的名字可直接使用,畢竟沒有命名空間名字來限定它們。不能使用作用域操作符來引用未命名的命名空間的成員。

未命名的命名空間中定義的名字只在包含該命名空間的檔案中可見。如果另一檔案包含乙個未命名的命名空間,兩個命名空間不相關。兩個命名空間可以定義相同的名字,而這些定義將引用不同的實體。

未命名的命名空間中定義的名字可以在定義該命名空間所在的作用域中找到。如果在檔案的最外層作用域中定義未命名的命名空間,那麼,未命名的命名空間中的名字必須與全域性作用域中定義的名字不同。

#ifndef namespace2_h

#define namespace2_h

namespace andersoft

namespace }

#endif

#include "stdafx.h"

#include "namespace2.h"

class andersoft::class3;

在標準c++中引入命名空間之前,程式必須將名字宣告為static,使它們區域性與乙個檔案。檔案中靜態宣告的使用從c語言繼承過來,在c語言中,宣告為static的區域性實體在宣告它的檔案之外不可見。

c++不贊成檔案靜態宣告。不贊成的特徵是在未來版本中可能不支援的特徵。應該避免檔案靜態而使用未命名的命名空間替代。

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

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

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

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

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

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