c++ google编程风格

简介


编码不易,每家公司都有它的脾气。

c++的编码风格也有不少流派,这里独选google,一是因为它牛逼,向牛逼的学习总没错,二是它有很多开源项目使用的就是这个风格。

当你不知道怎么做才好时,就先用google的吧,已经有无数前仁验证过了。

本文不是要再罗列一遍所有的细则,而是提炼出编码中随时需要使用的部分,作出总结,这样方便参考。

具体结节,还请稳步开源文档:C++ 风格指南。

头文件


  • 使用 #define 保护,为保证唯一性,头文件的命名使用项目目录的全路径
  • 避免使用前置声明,使用 #include 包含所需的头文件
  • 只有当函数小于10行,且没有循环,没有递归时才将其定义为内联函数,注意有些函数即使定义为内联,也不会被编译器内联(如虚函数、递归函数等)
  • #include 文件的顺序:关联头文件、c库、c++库、第三方库、本项目中其他头文件。

作用域


  • 鼓励在cpp文件中使用匿名命名空间或static声明,限定作用域为本文件
  • 将局部变量的作用域限定在足够小的范围内,仅在使用时才声明
  • 注意静态变量在不同的编译单元中构造顺序是不确定的,不要依赖它们的顺序
  • 不要使用using导入整个命名空间,如using namespace std;


  • 不要在构造函数中调用虚函数,也不要在无法报出错误的情况下使用可能发生错误的初始化
  • 不要定义隐式类型转换,必要时使用explicit关键字
  • 如果类型需要,就明确定义拷贝、移动构造函数,否则禁用默认的相关构造函数,如:MyClass(const MyClass&) = delete;
  • 仅当只有数据成员时,使用struct,否则使用class
  • 组合优先于继承,如果确实需要继承,使用public继承
  • 声明顺序:应以 public: 开始, 后跟 protected:, 最后是 private:. 省略空部分.

函数


  • 参数的顺序:先输入,后输出
  • 输入参数一般使用const修饰的引用,输出参数一般使用指针
  • 函数体不要过长,超过40行的函数,要考虑拆分成多个函数
  • 不要滥用函数重载,除非一眼就能看清使用意图,否则考虑修改函数名称

其它特性


  • 所有按引用传递的参数必须加上const
  • 使用std::vector替换变长数组
  • 允许合理地使用友元函数和友元类
  • 不建议使用c++异常,对于throw出去的异常,必须保证有catch到它的地方,否则可能造成崩溃
  • 类型转换不要再使用c语言模式的强制转换,使用如’static_cast’类型的转换
  • 只在记录日志的地方使用流(如cout、fstream等),使用printf + read/write,它们线程安全,且避免了cout对<<重载的滥用
  • 优先选用前置自增自减运算符
  • 不要使用宏,使用内联函数、枚举、常量代替它
  • 只要可读性好,提倡使用auto替换烦琐的类型名,但别用在局部变量之外的地方
  • 适当使用Lambda表达式,但别用默认捕获,所有捕获都要显式写出来
  • 尽量不要使用繁杂的模板编程
  • 适当使用Boost库,提倡使用c++11新特性

命名约定


  • 命名要有描述性,少用缩写,长也没有关系,关键是要见名知意
  • 文件名全部小写,单词之间使用下划线隔开
  • 类型名首字母大写,不使用下划线
  • 变量和数据成员名一律小写,单词之间使用下划线连接
    • 类的成员变量以下划线结尾
    • 结构体成员变量不使用下划线结尾
  • 常量命名以’k’开头,后接首字母大小的单词
  • 函数命名使用首字母大写的单词
  • 命名空间使用小写字母命名,具体名称取决于项目名称,注意避免冲突
  • 枚举中成员的命名和常量一致
  • 宏命名:全大写字母加下划线(希望你用不善这条)

注释


  • 尽量把代码写的不需要注释也能看懂,如果做不到,就加上必要的注释
  • 注释风格统一就行

格式


  • 每行代码不要超过80,注意换行

  • 源文件编码格式统一为utf-8

  • 建议使用空格缩进,可以在编辑器里把tab设置为空格

  • 函数声明与定义:

    • 使用好的参数名.
    • 只有在参数未被使用或者其用途非常明显时, 才能省略参数名.
    • 如果返回类型和函数名在一行放不下, 分行.
    • 如果返回类型与函数声明或定义分行了, 不要缩进.
    • 左圆括号总是和函数名在同一行.
    • 函数名和左圆括号间永远没有空格.
    • 圆括号与参数间没有空格.
    • 左大括号总在最后一个参数同一行的末尾处, 不另起新行.
    • 右大括号总是单独位于函数最后一行, 或者与左大括号同一行.
    • 右圆括号和左大括号间总是有一个空格.
    • 所有形参应尽可能对齐.
    • 缺省缩进为 2 个空格.
    • 换行后的参数保持 4 个空格的缩进.
  • 使用必要的空格来使表达式更可读

  • 使用必要的空行分隔逻辑,不可一次使得多个空行

规则特例


  • 新的编码风格不影响旧代码
  • windows代码的风格

小节


编码风格是一种规范,便于开发人员之间使用代码交流。才有人愿意review你的代码。

就像交通规则,看到绿灯就可以通行一样,有了google规范,看到 kTimeOut 就知道这是个常量。

使用经过验证的规范,还有利于避免一些缺陷和陷阱,减少debug时间。

更多详细内容,请参考 C++ 风格指南。

你可能感兴趣的:(cpp,c++,google,风格)