名稱空間的一些指導原則:
- 使用在已命名的名稱空間中聲明的變量,而不是使用外部全局變量。
- 使用在已命名的名稱空間中聲明的變量,而不是使用靜態(tài)全局變量。
- 如果開發(fā)了一個函數(shù)庫或類庫,將其放在一個名稱空間中。事實上,C++ 當前提倡將標準函數(shù)庫放在名稱空間 std 中,這種做法擴展到了來自C語言中的函數(shù)。例如,頭文件 math.h 是與 C 語言兼容的,沒有使用名稱空間,但 C++ 頭文件 cmath 應將各種數(shù)學庫函數(shù)放在名稱空間std中。
- 僅將編譯指令 using 作為一種將陳舊代碼轉換為使用名稱空間的權宜之計。
- 不要在頭文件中使用 using 編譯指令。首先,這樣做掩蓋了要讓哪些名稱可用;另外,包含頭文件的順序可能影響程序的行為。如果非要使用 using 編譯指令,應將其放在所有預處理器編譯指令 #include 之后。
- 導入名稱時,首選使用作用域解析操作符或 using 聲明的方法。
- 對于using聲明,首先將其作用域設置為局部而不是全局。
未命名的名稱空間:
namespace
{
int zdsCool;
int zdsHot;
}
這就像后面跟著 using 編譯指令一樣,也就是說,在該名稱空間中聲明的名稱的潛在作用域為:從聲明開始點到聲明區(qū)域末尾。從這方面看,它們與全局變量相似。不過,由于這種名稱空間沒有名稱,因此不能顯示的使用 using 編譯指令或 using 聲明來使它在其它位置都可用。具體地說,不能在未命名名稱空間所屬文件之外的其他文件中,使用該名稱空間中的名稱,因此該方法可替代鏈接性為內(nèi)部的靜態(tài)變量。實際上,C++ 標準不贊成在名稱空間和全局作用域中使用關鍵字 static(該標準使用“不贊成”表明,這種做法,目前合法,但以后很可能將其視為非法)。例如,下面代碼:
static int nCount;
int fun1();
int main()
{
…
}
int fun1()
{
…
}
C++ 標準的意思是,程序員應該這樣做:
namespace
{
int nCount;
}
int fun1();
int main()
{
…
}
int fun1()
{
…
}