effective C++笔记之条款28: 划分全局名字空间
2012-03-19 09:00
302 查看
l 全局空间最大的问题在于它本身仅有一个。在大的软件项目中,经常会有不少人把他们的定义放在这个单一的名字空间中,从而不可避免地导致名字冲突。
l 解决方法:
可以在全局符号前加上一些不大可能造成冲突的前缀。
另一个比较好的方法就是使用 C++ namespace 。namespace本质上和使用前缀的方法一样,只不过避免了别人总是看到前缀而已。用户可以通过三种方法来访问这一名字空间里的符号,如以下名字空间:
A. 将名字空间的所有符号全部引入到某一用户空间; using namespace sdm;
B. 将部分符号引入到某一用户空间;using sdm::BOOK_VERSION;
C. 通过修饰符显示地一次性使用某个符号 sdm::BOOK_VERSION;
l 有些名字空间没有名字。这种没命名的名字空间一般用于限制名字空间内部元素的可见性(M31)。
l 名字空间带来的最大的好处之一在于:潜在的二义性不会造成错误。所以从多个不同的名字空间引入同一个符号名不会造成冲突。假如有以下按名字空间:
只要不使用Handle,sdm和AcmeWindowSystem就不会造成名字冲突。如果真的要引用,需明确指明使用的是哪个名字空间中的Handle。
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。
相关文章推荐
- Effective c++ 条款28: 划分全局名字空间
- effective c++ 条款28: 划分全局名字空间
- Effective STL学习笔记-条款38
- effective C++笔记之条款24、25:在函数重载和设定参数缺省值间慎重选择、避免指针和数字类型重载
- effective C++笔记之条款36、37: 区分接口继承和实现继承、绝不要重新定义继承而来的非虚函数
- Effective c++条款28
- c++笔记01---c++ 简介,g++ 编译器,名字空间,结构,联合,枚举
- effective C++笔记之条款38: 绝不要重新定义继承而来的缺省参数值
- Effective c++ 学习笔记之条款一视C++为一个语言联邦
- More Effective C++ 条款28 Smart Pointers(智能指针)
- Effective C++笔记_条款46 需要类型转换时请为模板定义非成员函数
- 每日学习笔记(名字空间,new和delete)
- EffectiveC++学习笔记-条款2
- EffectiveC++学习笔记-条款5|6
- effective C++笔记之条款15:让operator=返回*this的引用
- EffectiveC++学习笔记-条款28|29
- OpenCV学习笔记(28)KAZE 算法原理与源码分析(二)非线性尺度空间构建
- iOS: 学习笔记, Swift名字空间
- Effective C++笔记_条款35 考虑virtual 函数以外的其他选择
- effective C++笔记之条款14:确定基类有虚析构函数