构造函数的职责
不要在构造函数中调用虚函数, 也不要在无法报出错误时进行可能失败的初始化.
隐式类型转换
不要定义隐式类型转换. 对于转换运算符和单参数构造函数, 请使用 explicit 关键字.
可拷贝类型和可移动类型
如果你的类型需要, 就让它们支持拷贝 / 移动. 否则, 就把隐式产生的拷贝和移动函数禁用.
结构体 VS. 类
仅当只有数据成员时使用 struct, 其它一概使用 class.
继承
使用组合常常比使用继承更合理. 如果使用继承的话, 定义为 public 继承.
多重继承
只有当所有父类除第一个外都是 纯接口类 时, 才允许使用多重继承. 为确保它们是纯接口, 这些类必须以 Interface 为后缀.
接口
接口是指满足特定条件的类, 这些类以 Interface 为后缀 (不强制).
运算符重载
除少数特定环境外, 不要重载运算符. 也不要创建用户定义字面量.
存取控制
将 所有 数据成员声明为 private, 除非是 static const 类型成员 (遵循 常量命名规则). 出于技术上的原因, 在使用 Google Test 时我们允许测试固件类中的数据成员为 protected.
声明顺序
将相似的声明放在一起, 将 public 部分放在最前.