1. 头文件命名规范
#ifndef <project>_<path>_<file>_H_
#define <project>_<path>_<file>_H_
#endif <project>_<path>_<file>_H_
例子:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_
说明 文件src/bar/baz.h文件在项目FOO中
2. 尽量声明完局部变量给其初值
int i ;
i = g(); // Bad
int i = g(); // good
vector<int> v;
v.push_back(1);
v.push_back(2); // prefer --
vector<int> v = {1,2} ; // good --
3. 如果一个类中需要复制或赋值功能,尽可能提示类似CopyFrom()或Clone()等成员函数,而禁掉复制构造函数与赋值重载=函数,因为这样能避免隐式转换,
如果想禁掉复制或赋值能函数,只需要在private里声明,但是不实现,这样别人调用时就会提示link error,方法如下
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
Then, in class Foo:
class Foo {
public:
Foo(int f);
~Foo();
private:
DISALLOW_COPY_AND_ASSIGN(Foo);
};
4. 命名规则
4.1 文件命名
文件名应该全部小定,可以包括下划线("_")和连接符(“-”)
Examples of acceptable file names:
my_useful_class.cc
my-useful-class.cc
myusefulclass.cc
myusefulclass_test.cc
内联功能必须在.h里面,如果你的内联代码非常短,直接在.h里给出实现
4.2 类型命名
类型应该以大写字母开始,每一个新的单词都应该以大写开头,不要有下划线,classes, structs, typedefs, and enums都使用这一规则
// classes and structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...
// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;
// enums
enum UrlTableErrors { ...
4.3 变量命名
变量命名全是小写,可以随便有下划线(“_”),如果是类的成员变量带上m_,如果是全局变量使用g_开头
For example:
string table_name; // OK - uses underscore.
string tablename; // OK - all lowercase.
string tableName; // Bad - mixed case.
4.4 常量命名
不管是什么常量变量,统一使用k开头
const int kDays = 365;
4.5 函数命名
常规的函数应该以一个大写字母开头,中间不能有下划线
例如:
AddTableEntry()
DeleteUrl()
set与get类型的函数,他们以变量命名规则
例如:
void setnum(int num); or void set_num(int num);
int getnum(int num); or int get_num(int num);
4.6 命名空间(namespace)
所有字母小写,可以依据项目名 路径名 类名结合来命名,自由发挥
4.7 枚举命名
简单点说,枚举全大写,并且可以有下划线
例如:
ENUM_NAME
4.8 宏命名(macro)
与枚举一样
例如:
#define ROUND(x) ...
#define PI_ROUNDED 3.0
4.9 每行代码长度不要超过80
4.10 对于要表达式要换行显示,逻辑符号永远在上一行末尾
例如:
if( aaaaaaaaaaaa == 10 &&
bbbbbbbbbbbb == 11 &&
cccccccccccccc == 12 )
{
}
以上来源于http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
本人只是简单的翻译了一些自己想记录的内容