一:头文件 作用域
使用前置声明,减少.h文件的#include数量,减少编译依赖
函数输入参数在前(const references),输出参数在后(non-const pointer)
include顺序:c,c++,其他库,本项目库
函数,类内部使用 using ::foo::bar 或 namespace fez = ::foo::bar::baz
减少不必要的构造函数和析构函数调用(定义初始化,变量位置,++前置)
二:类
对单参数构造函数使用 C++关键字 explicit,避免不期望的隐式类型转换
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
用做base class的destruct声明为virtual
使用防函数而不是操作符重载
编写短小的函数(40行)!!
仅在输入参数类型不同、功能相同时使用重载函数
将友元定义在同一文件下
使用static_cast<>,lexical_cast<>,除测试不使用dynamic_cast<>
使用断言声明变量为非负数,不要使用无符号型。
三:命名
类型和变量:名词 函数:指令性
类型名:大写开头不含下划线 UrlTable
成员函数:驼峰型
变量:小写下划线分割,成员变量下划线开始!!
宏和枚举:全大写加下划线!!
四:注释
文件注释:公告 作者信息 文件内容
类注释:类功能 用法
函数注释:
1) inputs(输入)及 outputs(输出);
2) 对类成员函数而言:函数调用期间对象是否需要保持引用参数,是否会释放这些参数; 3) 如果函数分配了空间,需要由调用者释放;
4) 参数是否可以为 NULL;
5) 是否存在函数使用的性能隐忧(performance implications);
6) 如果函数是可重入的(re-entrant),其同步前提(synchronization assumptions) 是什么?
实现注释:对于实现代码中巧妙的、晦涩的、有趣的、重要的地方加以注释。
TODO注释:// TODO(kl@gmail.com): Use a "*" here for concatenation operator.
五:空格和缩进
class MyClass : public OtherClass {
public: // Note the 1 space indent!
MyClass(); // Regular 2 space indent.
explicit MyClass(int var);
~MyClass() {}
void SomeFunction();
void SomeFunctionThatDoesNothing() {
}
void set_some_var(int var) { some_var_ = var; }
int some_var() const { return some_var_; }
private:
bool SomeInternalFunction();
int some_var_;
int some_other_var_;
DISALLOW_COPY_AND_ASSIGN(MyClass);
};