简介
尽量避免前置声明那些定义在其他项目中的实体
只有当函数只有
10
行甚至更少时才将其定义为内联函数#include
的包含顺序:C
系统文件C++
系统文件- 其他库的
.h
文件 - 本项目内的
.h
文件
局部变量:将函数变量尽可能置于最小作用域内,并在变量声明时进行初始化
Warning
:有一个例外,如果变量是一个对象,每次进入作用域都要调用其构造函数,每次退出作用域都要调用其析构函数,这样会导致效率降低Solution
:在循环作用域外面声明这类变量要高效的多
类:构造函数不允许调用虚函数
- 隐式类型转换:不要定义隐式类型转换,对于转换运算符和单参数构造函数,请使用
explicit
关键字 - 结构体和类:仅当只有数据成员时使用
struct
,其他一概使用class
- 隐式类型转换:不要定义隐式类型转换,对于转换运算符和单参数构造函数,请使用
编写简短函数:
- 我们倾向于编写简短、凝练的函数。长函数有时是合理的,因此并不硬性限制函数的长度;
- 如果函数超过
40
行,可以思考一下能不能在不影响程序结构的前提下对其进行分割。
所有按引用传递的参数必须加上
const
类型转换:使用
C++
的类型转换,如static_cast<>()
,不要使用int = (int)x
流:不要使用流,除非是日志接口需要;使用
printf
之类代替const
变量,数据成员、函数和参数为编译时类型检测增加了一层保障,便于尽早发现错误,因此强烈建议在任何情况下使用const
在
C++
中,用constexpr
来定义真正的常量,或实现常量初始化用
auto
绕过繁琐的类型名,只要可读性好就继续用,别用在局部变量之外的地方通用命名规则:函数命名、变量命名、文件命名要有描述性,少用缩写
- 文件名,要全部小写,包含下划线或连字符;
C++
文件要以.cc
结尾,头文件以.h
结尾- 类型名称,每个单词首字母均大写,不包含下划线,例如:
MyExcitingClass
- 变量名、函数参数和数据成员名一律小写,单词之间用下划线连接;
- 类的成员变量以下划线结尾,但结构体就不用,例如:
a_local_variable
,a_struct_data_member
,a_class_data_member_
- 常量命名:声明为
constexpr
或const
的变量,或在程序要运行期间其值始终保持不变的,命名时以k开头,大小写混合,例如:const int kDaysInAWeek = 7
; - 常规函数使用大小写混合,取值或设值函数则要求与变量名匹配,一般来说,函数名的每个单词首字母均大写
在每一个文件开头加入版权公告
每个类的定义都要附带一份注释,描述类的功能和用法,除非它的功能相当明显
函数注释,函数声明处的注释描述函数功能;定义处的注释描述函数实现
条件语句:不在圆括号内使用空间,关键字if和else另起一行
预处理指令:预处理指令不要缩进,从行首开始
不到万不得已,不要使用空行,函数之间的空行不要超出2行