详细内容请访问:
http://www.gesoftfactory.com/developer/cppcodingstandards/index.htm
(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.gesoftfactory.com/developer/cppcodingstandards/index.htm
(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. 不要以多态方式处理数组。