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

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);

}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: