ReturnType ClassName::FunctionName(Type par_name1, Type par_name2){ DoSomething(); ... }
如果同一行文本太多, 放不下所有参数:
1 2 3 4 5 6
ReturnType ClassName::ReallyLongFunctionName(Type par_name1, Type par_name2, Type par_name3){ DoSomething(); ... }
甚至连第一个参数都放不下:
1 2 3 4 5 6 7
ReturnType LongClassName::ReallyReallyReallyLongFunctionName( Type par_name1, // 4 space indent Type par_name2, Type par_name3){ DoSomething(); // 2 space indent ... }
注意以下几点:
返回值总是和函数名在同一行;
左圆括号总是和函数名在同一行;
函数名和左圆括号间没有空格;
圆括号与参数间没有空格;
左大括号总在最后一个参数同一行的末尾处(可选);
右大括号总是单独位于函数最后一行;
右圆括号和左大括号间总是有一个空格;
函数声明和实现处的所有形参名称必须保持一致;
所有形参应尽可能对齐;
缺省缩进为 2 个空格;
换行后的参数保持 4 个空格的缩进。
指针和引用表达式
句点或箭头前后不要有空格。指针/地址操作符 (*, &) 之后不能有空格。
1 2 3 4
x = *p; p = &x; x = r.y; x = r->y;
函数返回值
函数返回时不要使用圆括号:
1
return x; // not return(x);
变量及数组初始化
用 = 还是 () 均可,统一就好。下面两种方式都是正确的:
1 2 3 4
int x = 3; intx(3); string name("Some Name"); string name = "Some Name";
不缩进的语句
名字空间
名字空间不要增加额外的缩进层次:
1 2 3 4 5 6 7
namespace {
voidfoo(){ // Correct. No extra indentation within namespace. ... }
} // namespace
预处理指令
预处理指令不要缩进,从行首开始。即使预处理指令位于缩进代码块中,指令也应从行首开始。
1 2 3 4 5 6 7
// Good - directives at beginning of line if (lopsided_score) { #if DISASTER_PENDING // Correct -- Starts at beginning of line DropEverything(); #endif BackToNormal(); }
int some_var_; int some_other_var_; DISALLOW_COPY_AND_ASSIGN(MyClass); };
注意事项:
所有基类名应在 80 列限制下尽量与子类名放在同一行。
关键词 public:,protected:,private: 要缩进 1 个空格。
除第一个关键词 (一般是 public) 外,其他关键词前要空一行。如果类比较小的话也可以不空。
这些关键词后不要保留空行。
public 放在最前面,然后是 protected,最后是 private。
初始化列表
下面两种初始化列表方式都可以接受:
1 2
// When it all fits on one line: MyClass::MyClass(int var) : some_var_(var), some_other_var_(var + 1) {
或
1 2 3 4 5 6 7 8 9
// When it requires multiple lines, indent 4 spaces, putting the colon on // the first initializer line: MyClass::MyClass(int var) : some_var_(var), // 4 space indent some_other_var_(var + 1) { // lined up ... DoSomething(); ... }