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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值