简介

  • 尽量避免前置声明那些定义在其他项目中的实体

  • 只有当函数只有10行甚至更少时才将其定义为内联函数

  • #include的包含顺序:
    1. C系统文件
    2. C++系统文件
    3. 其他库的.h文件
    4. 本项目内的.h文件
  • 局部变量:将函数变量尽可能置于最小作用域内,并在变量声明时进行初始化
    1. Warning:有一个例外,如果变量是一个对象,每次进入作用域都要调用其构造函数,每次退出作用域都要调用其析构函数,这样会导致效率降低
    2. Solution:在循环作用域外面声明这类变量要高效的多
  • 类:构造函数不允许调用虚函数
    1. 隐式类型转换:不要定义隐式类型转换,对于转换运算符和单参数构造函数,请使用explicit关键字
    2. 结构体和类:仅当只有数据成员时使用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_
    • 常量命名:声明为constexprconst的变量,或在程序要运行期间其值始终保持不变的,命名时以k开头,大小写混合,例如:const int kDaysInAWeek = 7;
    • 常规函数使用大小写混合,取值或设值函数则要求与变量名匹配,一般来说,函数名的每个单词首字母均大写
  • 在每一个文件开头加入版权公告

  • 每个类的定义都要附带一份注释,描述类的功能和用法,除非它的功能相当明显

  • 函数注释,函数声明处的注释描述函数功能;定义处的注释描述函数实现

  • 条件语句:不在圆括号内使用空间,关键字if和else另起一行

  • 预处理指令:预处理指令不要缩进,从行首开始

  • 不到万不得已,不要使用空行,函数之间的空行不要超出2行