首页  ·  知识 ·  编程语言
C++编程规范
网友   http://www.azure.com.cn/    编辑:德仔   图片来源:网络
(C++ Coding Standards: 101 Rules, Guidelines, and Best Practices) 组织及策略上的问题(Organizational and Policy
(C++ Coding Standards: 101 Rules, Guidelines, and Best Practices)

组织及策略上的问题(Organizational and Policy Issues)

- 0. 不拘小节(或:了解什么不需要被规范化)。

- 1. 在高警告级别下干净地编译。

- 2. 使用自动化的构建(build)系统

- 3. 使用版本控制系统(version control system)。

- 4. 在代码复查上投资。

设计风格(Design Style)

- 5. 给每一个实体分配一份内聚的职责。

- 6. 以正确,简单,清晰为上。

- 7. 了解何时及如何为可伸缩性编写代码。

- 8. 不要过早地优化。

- 9. 不要过早地退而求次。

- 10. 将全局和共享的数据减至最少。

- 11. 隐藏信息。

- 12. 了解何时及如何为并发性编写代码。

- 13. 确保资源为对象所占有。使用显式的RAII和智能指针。

编程风格(Coding Style)

- 14. 宁可在编译和链接时出错也不要在运行时出错。

- 15. 主动使用const。

- 16. 避免使用宏。

- 17. 避免使用魔数(magic numbers)。

- 18. 尽可能局部地声明变量。

- 19. 始终初始化变量。

- 20. 避免太长的函数。避免太深的嵌套。

- 21. 避免不同的编译单元在初始化过程中的依赖关系。

- 22. 将定义时的依赖性降至最低。避免循环依赖性。

- 23. 保证头文件的自足性(Make header files self-sufficient)。

- 24. 始终用内部#include防护哨。绝对不要用外部#include防护哨。

函数与操作符(Functions and Operators)

- 25. 通过值,(智能)指针,或引用适当地取得参数。

- 26. 在重载操作符时,要保留被重载操作符的自然语义。

- 27. 最好是保持算术和赋值运算符的标准形式。

- 28. 最好是保持标准形式的++和--。最好是调用前缀的形式。

- 29. 考虑通过重载来避免隐式的类型转换。

- 30. 避免重载&&, ||, 或, (逗号)。

- 31. 不要编写对函数参数的求值顺序有依赖性的代码。

名字空间与模块(Namespaces and Modules)

- 57. 把类型和它的非成员函数接口放在同一个名字空间中。

- 58. 除非有意让类型和函数协作,否则把它们放在单独的名字空间中。

- 59. 不要在头文件中或#include语句之前写名字空间层级的using。

- 60. 避免在不同的模块中分配和释放内存。

- 61. 不要在头文件中定义具有链接属性的实体(entities with linkage)。

- 62. 不要让异常在传递时跨越模块的边界。

- 63. 在模块的接口中使用可移植的类型。

错误处理与异常(Error Handling and Exceptions)

- 68. 大量使用断言来说明内部的假设和不变性。

- 69. 设立一套合理的错误处理策略,并严格遵循。

- 70. 区分错误与非错误。

- 71. 设计并编写能够安全地处理错误的代码。

- 72. 尽量用异常来报告错误。

- 73. 抛出值,捕获引用。

- 74. 适当地报告,处理并转换错误。

- 75. 避免异常规格(exception specifications)。

STL容器(STL: Containers)

- 76. 默认情况下使用vector。否则选择其它合适的容器。

- 77. 用vector和string取代数组。

- 78. 使用vector(以及string::c_str)来和非C++ API交换数据。

- 79. 仅在容器中存储值和智能指针。

- 80. 与其它方法相比,要尽量使用push_back来扩大容器。

- 81. 与单元素操作相比,要尽量使用区间操作。

- 82. 使用公认的惯用法来真正地缩小容量以及真正地删除元素。

STL算法(STL: Algorithms)

- 83. 使用一个带检查的(checked)STL实现。

- 84. 与手工编写的循环相比,要尽量调用STL算法。

- 85. 使用正确的STL查找算法。

- 86. 使用正确的STL排序算法。

- 87. 使predicate成为纯函数(pure function)。

- 88. 在用作算法和比较器(comparer)时,要优先用函数对象来代替函数。

- 89. 正确地编写函数对象(Function Object)。

类型安全性(Type Safety)

- 90. 避免类型选择(type switching);尽量使用多态。

- 91. 依赖于对象类型,而不要依赖于对象的表示方法。

- 92. 避免使用reinterpret_cast。

- 93. 避免用static_cast来强制转换指针类型。

- 94. 避免强制去除const。

- 95. 不要用C风格的强制类型转换。

- 96. 不要对非POD类型使用memcpy或memcmp。

- 97. 不要用union来重新解释数据。

- 98. 不要使用varargs(省略号)。

- 99. 不要使用无效的对象。不要使用不安全的函数。

- 100. 不要以多态方式处理数组。
本文作者:网友 来源: http://www.azure.com.cn/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读