l 全局空間最大的問題在於它本身僅有一個。在大的軟件項目中,經常會有不少人把他們的定義放在這個單一的名字空間中,從而不可避免地導致名字衝突。
l 解決方法:
- 可以在全局符號前加上一些不大可能造成衝突的前綴。
- 另一個比較好的方法就是使用 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。