C++代码格式规范引导(3):命名空间
Contents
命名空间
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之间不留空行
命名空间规范示例
|
|
Author 朦呆农码
LastMod 2017-11-03