参考《Google C++ 编程风格指南》 整理
头文件
#pragma once
#define
保护的命名格式为<PROJECT>_<PATH>_<FILE>_H_
#include
包含需要的头文件即可
- 首选头文件
- C 系统文件
- C++ 系统文件
- 其他库的
.h
文件- 本项目内
.h
文件
std
内声明namespace
,所有置于匿名命名空间的声明都具有内部链接性禁止在构造函数中调用虚函数
禁止在无法报出错误时进行可能失败的初始化,考虑使用 Init()
方法或使用工厂模式
禁止在构造函数中抛出异常
不要定义隐式类型转换
如果需要就让你的类型可拷贝, 需要同时给出拷贝构造函数和赋值操作符的定义
类型不需要拷贝, 需要将拷贝构造函数和赋值运算符禁用。
仅当只有数据成员时使用 struct
, 其它一概使用 class
所有继承必须是 public
的
如果基类有虚函数, 则析构函数也应该为虚函数
所有数据成员都是私有的
只有当所有父类除第一个外都是 <a href="#3.7. 接口">纯接口类</a> 时, 才允许使用多重继承
除少数特定环境外, 不要重载运算符. 也不要创建用户定义字面量
建议:类中声明顺序为类型 (包括 typedef
, using
和嵌套的结构体与类), 常量, 工厂函数, 构造函数, 赋值运算符, 析构函数, 其它函数, 数据成员
const
引用, 输出参数或输入/输出参数则一般为非 const
指针printf
之类的代替nullptr
,指针使用前要进行有效性判断if (nullptr == p)
或if (nullptr == p)
进行防错处理nullptr
sizeof(varname)
代替sizeof(type)
MFC
项目中自动生成的文件名可不遵循本规则typedef
), 枚举命名单词首字母均大写, 不包含下划线//
或 `/ */`, 统一就好.h
和 .cc
文件中), 此时, 描述类用法的注释应当和接口定义放在一起, 描述类的操作和实现的注释应当和实现放在一起NULL
或 -1
等警戒值, 须加以说明;全局变量注释全局的原因TODO
, 在随后的圆括号里写上你的名字, 邮件地址, bug IDDEPRECATED
在括号中留下您的名字, 邮箱地址以及其他身份标识if
和 else
另起一行,如果有else if 在最后要加一个 elsedefault
匹配,如果 default
应该永远执行不到, 简单的加条 assert
,两条case
之间没有break
需要注释加以说明*, &
) 之后不能有空格==
与常量比较时常量要写在前面&&
) 操作符总位于行头x = expr
要加上括号的时候才在 return expr;
里使用括号std::initializer_list
构造函数public:
, protected:
, private:
, 不缩进#pragma once