C++代码格式规范引导(三):命名空间
2017-11-03 23:06
656 查看
命名空间
C++语言中的作用域管理方法,大致可以分为两类:物理作用域、逻辑作用域。物理作用域,从磁盘分布、内存管理的角度分离作用域,如工程文件管理文件列表、代码分目录、代码分文件、拆分类、多数括号(大、小括号);逻辑作用域,指的是只修改作用域的标记符,不会改变物理磁盘分布、内存分配或对象生命周期,如命名空间、public/protected/private等。逻辑作用域的最大特点是自由,突破物理作用域限制,制定新的逻辑作用域规则,如public/protected/private可在类中的任意位置、任意多次出现,改变其中任意成员、方法的可见域;命名空间可跨文件管理,亦可在单文件内拆出多个可视域。命名空间管理可分为定义命名空间(namespace)、引用命名空间(using namespace/using)两块内容。
定义命名空间
作为逻辑作用域,命名空间具有很大的自由度,若不加以限制将很容易造成混乱,其本质作用是代码隔离,防止污染,基本原则如下:命名空间全路径尽量保证在1级到4级之间,不允许使用匿名空间,不建议过多的命名空间层级
命名空间层级数越少,其内提供的能力应越通用,层级数越多,其业务耦合性、特化效果应越强
同父命名空间路径下,子命名空间抽象层级应保持一致
命名空间全路径不应跨工程
同一工程下,命名空间全路径应保持一致
多级命名空间应置于一行
命名空间名称需要与前后的{保持一个空格的间距
多级命名空间结束时,置于一行,}之间无需存在空格
1级命名空间具有非常大的作用域范围,只应用于C++基础能力的扩充、第三方C++标准库的封装、产品底层框架的封装等基础能力。
引用命名空间
引用命名空间说起来算是一种偷懒的行为,避免在代码中写很长的命名空间路径,但在局部范围内破坏了命名空间的隔离效用,需谨慎对待。其基本原则如下:头文件中严禁引用命名空间
命名空间全路径只有1级时,严禁引用此命名空间,如std/boost等
某一命名空间中对象只有1-2个被引用,且对象使用次数也只有1-2次时,不引用命名空间
某一命名空间中对象只有1-2个被引用时,使用using 命名空间全路径::对象名;
某一命名空间中对象被大量引用时,使用using namespace 命名空间全路径;
using 命名空间全路径::对象名;与using namespace 命名空间全路径;不可出现命名空间全路径相同的场景
using namespace 命名空间全路径;同一文件中,不应出现路径嵌套
适当情况下,不引用命名空间全路径,保留最后一级命名空间不引用,可提高对象隔离效果
using namespace 命名空间全路径;均在using 命名空间全路径::对象名;之前
命名空间全路径using顺序同头文件引用顺序
using之间不留空行,与命名空间定义namespace之间不留空行
命名空间规范示例
namespace FistLevel { namespace SecondLevel { namespace ThirdLevel { using namespace A::B::C; using namespace A1::B1; using A2::B2::B2Object; A::Object getObject(std::string); }}}
相关文章推荐
- C/C++ 代码规范: 命名规则、注释、格式
- C++代码格式规范引导(一):引言与代码布局
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C++代码格式规范引导(二):头文件
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- c++代码命名规范
- 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
- C++代码规范之命名规则
- C++代码规范之命名
- C++代码规范之命名规则
- c++命名规范与代码风格
- c++代码命名规范
- C++代码规范之命名
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- C++代码命名规范约定
- c++规范之 命名空间
- c++命名规范与代码风格