C++的风格大致上可以遵守 C 的风格,这里罗列了一些不同的地方:
所有编译时常量,无论是局部的,全局的还是类中的,和其他变量稍微区别一下. k 后接大写字母开头的单词:
1 | const int kDaysInAWeek = 7; |
枚举的命名应当和常量或宏一致:kEnumName
或是 ENUM_NAME
。单独的枚举值应该优先采用常量的命名方式。
函数名的每个单词首字母大写,没有下划线:
1 | AddTableEntry() |
取值和设值函数要与存取的变量名匹配. 这儿摘录一个类,num_entries_ 是该类的实例变量:
1 | class MyClass { |
其它非常短小的内联函数名也可以用小写字母,例如。如果你在循环中调用这样的函数甚至都不用缓存其返回值,小写命名就可以接受。
名字空间用小写字母命名, 并基于项目名称和目录结构: 例如:google_awesome_project
。
只使用空格,每次缩进 2 个空格。
函数参数,逻辑条件,初始化列表: 要么所有参数和函数名放在同一行,要么所有参数并排分行。
除函数定义的左大括号可以置于行首外,包括函数/类/结构体/枚举声明,各种语句的左大括号置于行尾,所有右大括号独立成行。
函数看上去像这样:
1 | ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) { |
如果同一行文本太多, 放不下所有参数:
1 | ReturnType ClassName::ReallyLongFunctionName(Type par_name1, |
甚至连第一个参数都放不下:
1 | ReturnType LongClassName::ReallyReallyReallyLongFunctionName( |
注意以下几点:
句点或箭头前后不要有空格。指针/地址操作符 (*, &) 之后不能有空格。
1 | x = *p; |
函数返回时不要使用圆括号:
1 | return x; // not return(x); |
用 =
还是 ()
均可,统一就好。下面两种方式都是正确的:
1 | int x = 3; |
名字空间不要增加额外的缩进层次:
1 | namespace { |
预处理指令不要缩进,从行首开始。即使预处理指令位于缩进代码块中,指令也应从行首开始。
1 | // Good - directives at beginning of line |
用于 goto 语句的自定义标号应该顶头写不缩进,而不管标号下的语句缩进到第几层。
访问控制块的声明依次序是 public:
, protected:
, private:
, 每次缩进 1 个空格。
1 | class MyClass : public OtherClass { |
注意事项:
public:
,protected:
,private:
要缩进 1 个空格。下面两种初始化列表方式都可以接受:
1 | // When it all fits on one line: |
或
1 | // When it requires multiple lines, indent 4 spaces, putting the colon on |