c++编程风格总结

本文基于“Google 开源项目风格指南”整理

1 头文件

  • 尽可能地避免使用前置声明。使用 #include 包含需要的头文件;
  • 避免使用快捷路径 ./ 或 …/,使用完整路径;
  • 头文件包含顺序:
  1. 源文件xxx.cpp对应的xxx.h
  2. C 系统文件
  3. C++ 系统文件
  4. 其他库的 .h 文件
  5. 本项目内 .h 文件
    可以在 #include 中插入空行以分割相关头文件

2 作用域

  • 鼓励使用匿名命名空间
  • 最好不要使用using指示,不要用内联命名空间
  • 在尽可能小的作用域内定义变量,离第一次使用越近越好
  • 静态或全局变量必须是原生数据类型,不能是class(不确定的构造和析构函数调用顺序)

3 类

  • 不要在构造函数中进行复杂逻辑相关的初始化,包括可能产生异常的和虚函数调用
  • 对单个参数的构造函数使用explicit
  • 若不需要拷贝、移动,则将其禁用
  • 使用委派和继承构造函数减少代码复用
  • has-a用组合,is-a才用继承(实现继承、接口继承),所有继承采用public,析构声明为virtual
  • 只用当父类最多有一个是非抽象类,其他都是接口类时,才使用多继承
  • 通常不要重载运算符
  • 静态常量成员不需要是私有,对于存取函数在头文件中定义为内联
  • 声明时,public在private前,成员函数在成员变量前,每个区段内顺序:1.typedef和枚举 2.常量 3.构造和析构 4.成员函数 5.成员变量

4 函数

  • 参数顺序为输入参数在前,输出参数在后
  • 引用参数都必须用const,输入参数为值或const引用,输出参数使用指针

5 其他

  • 动态分配出的对象倾向于用std::unique_ptr来明确所有权传递
  • 右值引用只用于移动构造函数和移动赋值运算中
  • 不要用RTTI,使用虚函数替代
  • 除非是日志需要,否则不要使用流,用printf替代
  • 前置自增替代后置自增
  • 用断言来指出变量非负,不要使用无符号型
  • 尽量以内联函数、枚举和常量代替宏,在马上要使用时才#define,用完马上#undef
  • auto只能在局部变量里用
  • lambda的捕获都应该显示地写出来:[=](int x){return x + n;} 应当写成[n](int x){return x + n;}

6 命名约定

  • 文件名全部小写,下划线连接
  • 类、结构体、类型定义typedef、枚举命名每个单词大写,不包含下划线
  • 变量名小写,下划线连接,类的成员变量下划线结尾,全局变量可以用g_前缀
  • 全局或类里的常量以k开头,后面的每个单词大写,枚举值也应如此
  • 取值设值函数要与变量名匹配
  • 命名空间小写,基于项目名称目录架构
  • 宏全部大写,下划线连接
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页