您的位置:首页 > 编程语言 > C语言/C++

effective C++笔记之条款28: 划分全局名字空间

2012-03-19 09:00 239 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: