构造函数的职责

不要在构造函数中调用虚函数, 也不要在无法报出错误时进行可能失败的初始化.

隐式类型转换

不要定义隐式类型转换. 对于转换运算符和单参数构造函数, 请使用 explicit 关键字.

可拷贝类型和可移动类型

如果你的类型需要, 就让它们支持拷贝 / 移动. 否则, 就把隐式产生的拷贝和移动函数禁用.

结构体 VS. 类

仅当只有数据成员时使用 struct, 其它一概使用 class.

继承

使用组合常常比使用继承更合理. 如果使用继承的话, 定义为 public 继承.

多重继承

只有当所有父类除第一个外都是 纯接口类 时, 才允许使用多重继承. 为确保它们是纯接口, 这些类必须以 Interface 为后缀.

接口

接口是指满足特定条件的类, 这些类以 Interface 为后缀 (不强制).

运算符重载

除少数特定环境外, 不要重载运算符. 也不要创建用户定义字面量.

存取控制

将 所有 数据成员声明为 private, 除非是 static const 类型成员 (遵循 常量命名规则). 出于技术上的原因, 在使用 Google Test 时我们允许测试固件类中的数据成员为 protected.

声明顺序

将相似的声明放在一起, 将 public 部分放在最前.