(C++ Coding Standards: 101 Rules, Guidelines, and Best Practices)
组织及策略上的问题(Organizational and Policy Issues)
- 3. 使用版本控制系统(version control system)。
设计风格(Design Style)
- 13. 确保资源为对象所占有。使用显式的RAII和智能指针。
编程风格(Coding Style)
- 23. 保证头文件的自足性(Make header files self-sufficient)。
- 24. 始终用内部#include防护哨。绝对不要用外部#include防护哨。
函数与操作符(Functions and Operators)
- 28. 最好是保持标准形式的++和--。最好是调用前缀的形式。
类设计及继承(Class Design and Inheritance)
- 37. 公有继承代表可替换性。继承,不是为了重用,而是为了被重用。
- 39. 考虑使虚函数成为非公有函数,使公有函数成为非虚函数。
- 41. 使类的数据成员为私有,除非是无行为的聚合类(C风格的结构)。
- 46. 如果你提供类特有的new,那么要提供所有的标准形式(plain,in-place,及nothrow)。
构造,析构,及复制操作(Construction, Destruction, and Copying)
- 48. 在构造函数中最好是用初始化列表而避免用赋值操作符。
- 50. 使基类的析构函数成为公有的虚函数,或受保护的非虚函数。
- 51. 析构函数,资源释放函数,以及swap绝不会失败。
- 54. 避免分割对象。考虑用Clone来取代在基类中进行复制。
名字空间与模块(Namespaces and Modules)
- 57. 把类型和它的非成员函数接口放在同一个名字空间中。
- 58. 除非有意让类型和函数协作,否则把它们放在单独的名字空间中。
- 59. 不要在头文件中或#include语句之前写名字空间层级的using。
- 61. 不要在头文件中定义具有链接属性的实体(entities with linkage)。
模板与泛型(Templates and Genericity)
错误处理与异常(Error Handling and Exceptions)
- 75. 避免异常规格(exception specifications)。
STL容器(STL: Containers)
- 76. 默认情况下使用vector。否则选择其它合适的容器。
- 78. 使用vector(以及string::c_str)来和非C++ API交换数据。
- 80. 与其它方法相比,要尽量使用push_back来扩大容器。
- 82. 使用公认的惯用法来真正地缩小容量以及真正地删除元素。
STL算法(STL: Algorithms)
- 87. 使predicate成为纯函数(pure function)。
- 88. 在用作算法和比较器(comparer)时,要优先用函数对象来代替函数。
- 89. 正确地编写函数对象(Function Object)。
类型安全性(Type Safety)
- 90. 避免类型选择(type switching);尽量使用多态。
- 93. 避免用static_cast来强制转换指针类型。