PS:Google的编码规范,与其他编码规范相比比较特殊的地方就是对异常、智能指针的使用,异常要求不使用,智能指针也就是用个scope_ptr。异常C++中使用的本来就不多,不使用异常理由有捕获可能遗漏处理在一些情况下容易出错、破坏了结构化程序流等。与少于智能指针一样,容易导致错误。
其他的还有“不要用省略字母的缩写”,尽量用单词全拼,“并不完美的代码使用 TODO 注释。”,拷贝构造函数的默认禁用,下面是部分规范。
所有头文件都应该使用#define 防止头文件被多重包含(multiple inclusion),命名格式为:
PROJECT_PATH_FILE_H_使用前置声明(forward declarations)尽量减少.h 文件中#include 的数量。
当函数只有 10 行甚至更少时才会将其定义为内联函数(inline function)。重要的是,虚函数和递归函数即使被声明为内联的也不一定就是内联函数。通常,递归函数不应该被声明
为内联的(译者注:递归调用堆栈的展开并不像循环那么简单,比如递归局数在编译时可能是未知的,大
多数编译器都不支持内联递归函数)。定义函数时,参数顺序为:输入参数在前,输出参数在后。
将包含次序标准化可增强可读性、避免隐藏依赖(hidden dependencies,注:隐藏依赖主要是指包含的
文件编译),次序如下:C 库、C++库、其他库的.h、项目内的.h。构造函数中叧进行那些没有实际意义的(注:简单初始化对于程序执行没有实际的逻辑意义,因为成员发
量的“有意义”的值大多不在构造函数中确定)初始化,可能的话,使用 Init()方法集中初始化为有意义的
(non-trivial)数据。对单参数构造函数使用 C++关键字 explicit。
仅在代码中需要拷贝一个类对象的时候使用拷贝构造函数;不需要拷贝时应使用
DISALLO