effective C++筆記之條款28: 劃分全局名字空間


l        全局空間最大的問題在於它本身僅有一個。在大的軟件項目中,經常會有不少人把他們的定義放在這個單一的名字空間中,從而不可避免地導致名字衝突。

l        解決方法:

  1. 可以在全局符號前加上一些不大可能造成衝突的前綴。
  2. 另一個比較好的方法就是使用 C++ namespace 。namespace本質上和使用前綴的方法一樣,只不過避免了別人總是看到前綴而已。用戶可以通過三種方法來訪問這一名字空間裏的符號,如以下名字空間:

namespace sdm
{
		const double BOOK_VERSION = 2.0;
		class Handle{…};
		Handle& getHandle();
}	 


A.       將名字空間的所有符號全部引入到某一用戶空間; using namespace sdm;

B.       將部分符號引入到某一用戶空間;using sdm::BOOK_VERSION; 

C.        通過修飾符顯示地一次性使用某個符號 sdm::BOOK_VERSION;

l        有些名字空間沒有名字。這種沒命名的名字空間一般用於限制名字空間內部元素的可見性(M31)。

l        名字空間帶來的最大的好處之一在於:潛在的二義性不會造成錯誤。所以從多個不同的名字空間引入同一個符號名不會造成衝突。假如有以下按名字空間:

namespaceAcmeWindowSystem
{
         typedef int Handle;
}


只要不使用Handle,sdm和AcmeWindowSystem就不會造成名字衝突。如果真的要引用,需明確指明使用的是哪個名字空間中的Handle。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章