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。