C++语言编程规范
内部公开
2012-03-19 华为机密,未经许可不得扩散 第1页,共57页
华为技术有限公司内部技术规范
DKBA 2979-2012.03
C++语言编程规范
2012年03月15日发布 2012年03月15日实施
华为技术有限公司
Huawei Technologies Co., Ltd.
版权所有 侵权必究
C++语言编程规范
内部公开
2012-03-19 华为机密,未经许可不得扩散 第2页,共57页
修订声明
本规范拟制与解释部门:
本规范的相关系列规范或文件:
相关国际规范或文件一致性:
替代或作废的其它规范或文件:
相关规范或文件的相互关系:
规范号 主要起草部门专家 主要评审部门专家 修订情
况
DKBAxxxx.x-xxxx.xx
研发能力中心系统工程
部:
郭曙光00121837
王红超00134169
李循律46151
软件公司:
文滔00119601
马洪波00164562
赵玉锡0039301
赵祎00108293
邓赛兵00101270
吴鹏69403
融合通信:
张小林58208
陈崇辉58924
无线:
张振江64529
陶永祥120482
中软:
黄剑豪152126
网络:
张 伟118807
研发能力中心:
郭永生00120218 张建保00116237
中研:
王奇00121935
无线:苏光牛00118740
软件公司:周代兵00120359
张锦元00160906 谢峰00150451
张振国00039875 陈春美41639
邓春平00036632 胡小翔00160924
李玉华39860
网络:
王玎00168059 刘宏业00121368
艾小平52519
融合通信:
董志凌46134 苏昆00145871
潘会民48511
成研所:
李朝阳00117623
海思:
孙学全00148680
IT:
戴强51135
相关国际规范或文件一致性:
C++语言编程规范
内部公开
2012-03-19 华为机密,未经许可不得扩散 第3页,共57页
目 录
0 说明 ...................................................... 5
0.1 前言 ...................................................................................................................................... 5
0.2 代码总体原则 ....................................................................................................................... 5
0.3 与C语言编程规范的关系 ...................................................................................................... 6
0.4 规范实施、解释 .................................................................................................................... 6
0.5 术语定义 ............................................................................................................................... 6
1 常量 ...................................................... 6
2 初始化和类型转换 .......................................... 8
2.1 声明、定义与初始化 ............................................................................................................ 8
2.2 类型转换 ............................................................................................................................. 10
3 函数 ..................................................... 12
3.1 内联函数 ............................................................................................................................. 12
3.2 函数参数 ............................................................................................................................. 13
3.3 函数指针 ............................................................................................................................. 14
4 类 ....................................................... 14
4.1 类的设计 ............................................................................................................................. 14
4.2 构造、赋值和析构 .............................................................................................................. 17
4.3 继承 .................................................................................................................................... 21
4.4 重载 .................................................................................................................................... 24
5 作用域、模板和C++其他特性 ................................ 25
5.1 作用域 ................................................................................................................................ 25
5.2 模板 .................................................................................................................................... 27
5.3 其他 .................................................................................................................................... 28
6 资源分配和释放 ........................................... 28
7 异常与错误处理 ........................................... 33
7.1 异常 .................................................................................................................................... 33
7.2 错误处理策略 ..................................................................................................................... 35
8 标准库 ................................................... 36
9 程序效率 ................................................. 41
9.1 C++语言特性的性能分级.................................................................................................... 41
9.2 C++语言的性能优化指导.................................................................................................... 42
C++语言编程规范
内部公开
2012-03-19 华为机密,未经许可不得扩散 第4页,共57页
10 并发 ..................................................... 45
11 风格 ..................................................... 48
11.1 标示符命名与定义 .............................................................................................................. 48
11.2 排版 .................................................................................................................................... 48
11.3 注释 .................................................................................................................................... 49
11.4 文件组织 ............................................................................................................................. 49
12 可移植性(兼容性) ......................................... 49
13 全球化 ................................................... 52
13.1 多语言输入输出 .................................................................................................................. 52
13.2 单一版本 ............................................................................................................................. 53
13.3 时区夏令时 ......................................................................................................................... 54
14 业界编程规范和书籍 ....................................... 55
14.1 业界编程规范 ..................................................................................................................... 55
14.1.1 《google C++ code style》 (google C++编程指南) ......................................... 55
14.1.2 《C++编程规范101条规则、准则与最佳实践》 ............................................... 56
14.1.3 Microsoft All-In-One Code Framework《微软一站式示例代码库》 ................. 56
14.2 扩展学习材料 ..................................................................................................................... 56
14.2.1 C++ primer ........................................................................................................ 56
14.2.2 effective C++ / more effective C++ ................................................................... 56
14.2.3 Effective STL ..................................................................................................... 57
14.2.4 inside the C++ object model ............................................................................. 57
C++语言编程规范
内部公开
2012-03-19 华为机密,未经许可不得扩散 第5页,共57页
C++语言编程规范
0 说明
0.1 前言
随着业务的发展和产品架构的演进,越来越多的传统电信产品使用C++语言,很多新型产品更是把C++
作为首选。C++继承于C,包含C的所有特性,同时又增加了新语言特性,如面向对象、泛型设计等。目
前C++使用现状是:基础技能薄弱,陷入很多误区,不能很好地发挥C++的作用。为了帮助团队合理使
用C++,规避语言陷阱,特制定本规范。
0.2 代码总体原则
跟C语言编程一样,C++编程遵循通用原则:
1、清晰第一。清晰性是易于维护、易于重构的程序必需具备的特征。
2、简洁为美。简洁就是易于理解并且易于实现。
3、选择合适的风格,与代码原有风格保持一致。
除此之外,C++编程还应该注意以下方面:
1、正确使用C++
面向对象技术使得程序结构清晰、简单,提高了代码的重用性,但又隐藏了很多内部实现细节,内存
模型复杂,不小心会误入陷阱,比如:拷贝构造函数,赋值操作符,析构函数,重载等。
为了简化代码,改善代码结构,提高编程效率,一些团队引入新特性和第三方库,如:模板技术、STL、
Boost等,由于缺乏足够的理解,使用中屡次发生问题,比如对迭代器(Iterator)使用不当导致功能失
常,甚至程序崩溃。所以,必须深入理解C++对象布局、内存模型等,了解编译器背后所做的处理,才
能在编程中知道如何正确使用。
2、安全高效
跟其他流行的高级语言、脚本语言相比,C++运行速度快,天然适合开发核心通信部件,但是这些部件
对稳定性的要求非常高,不容许发生异常、失效以及崩溃。C++具有直接操作硬件、访问内存的能力,
提供了指针、地址运算等灵活特性,程序员可以任意发挥,增加了出错的几率。所以在追求速度与灵
活性的同时,一定要注意保持程序的健壮性。在增强代码稳定性过程中,程序员通常采用if-else等防
御式编程,使得代码非常臃肿,可适当采用RAII、智能指针等技术。