《Google C++编程风格指南》出来有一段时间,最近才得以静下心来看,现记录一下在以后编码中值得注意的部分,对于一些已经普遍认可或约定成文的规则,就不再过多说明。
一、头文件
1、尽量使用前置声明,避免头文件依赖的多米诺效应;
2、逻辑简单的短小函数可以使用内联函数来提高效率;
3、确定函数输入输出参数的顺序,并在项目中保持一致;
4、头文件的路径要清晰明了,顺序尽量按:本cpp直接依赖h文件、C库h文件、C++库文件、其他库h文件、本项目其他h文件
二、命名空间
1、源文件尽量使用匿名空间,避免命名冲突;
2、h文件不要使用匿名空间,而应该使用命名空间;
3、尽量不使用裸的全局函数,用静态成员函数或命名空间的非成员函数替代;
三、类
1、构造函数只进行无意义的初始话操作,不要做别的操作,有意义的初始话操作最好提供一个Init()函数来完成;
2、默认构造函数是否需要根据成员变量是否全为内建类型而定;
3、所有单参数的构造函数必须是explicit声明的;
4、尽量禁止使用拷贝和赋值构造函数,可以用以下宏来实现:
// 禁止使用拷贝构造函数和 operator= 赋值操作的宏
// 应该类的 private: 中使用
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
TypeName& operator=(const TypeName&);
5、只有数据时使用struct;
6、所有继承都应该是public的,若非,则使用组合原则;
7、尽量不使用多重继承,若非,则基类除第一个外其他必须为纯接口类;
8、尽量不使用运算符重载,而用相应的函数来替代。例如:使用Add()代替+运算符的重载;
9、函数尽量短小精悍,功能单一;
四、来自Google的技巧
1、懂得使用智能指针;
2、使用cpplint.py来检查风格;
五、其他
1、所有引用参数必须是const的;否则,用相应的指针来代替;
2、不要使用C++异常,若非,则说明代码逻辑不完整;
3、不要使用RTTI,单元测试除外;
4、应该使用C++风格的类型转换;
5、对于迭代器和其他模板对象使用前自增、前自减更有效率;
6、尽量使用const代替宏,若非,请在使用时#define,使用后立即#undef;
7、使用0表示整数,使用NULL表示空指针,使用‘\0’表示字符;
8、尽量使用sizeof(varname)代替sizeof(type);
六、命名约定
1、类型名称的每个单词首字母均大写,不包含下划线:MyExcitingClass,MyExcitingEnum;
2、变量名用小写,用下划线连接;
3、常量和宏全部大写;
七、注释
1、单行注释用//,多行注释用/**/;
2、在文件开头加文件注释声明版权和描述;
3、在类的定义前加类注释声明类功能;
4、应该有合适的函数声明;
5、特别变量要有变量注释;
6、巧妙的设计和算法要有注释;
八、格式
1、行长最多不应超过一屏的宽度;
2、要有适当的空格;