谷歌C++ 编码规范(部分)

参考资料: 谷歌C++ 风格指南

 

一. 头文件

1. 通常每一个 .cc 文件都有一个对应的 .h 文件. 也有一些常见例外, 如单元测试代码和只包含 main() 函数的 .cc 文件
2. 所有头文件都应该使用 #define 来防止头文件被多重包含. (Windows中很多使用 #pragma once )

二. 命名空间

1. 鼓励在 .cc 文件内使用命名空间,命名空间将全局作用域细分为独立的, 具名的作用域, 可有效防止全局作用域的命名冲突
2. .cc文件里命名空间中的代码要顶格,不加缩进
3. 在命名空间的最后注释出命名空间的名字,并且命名空间内首行和尾行加空行

三. 局部变量

1. 将函数变量尽可能置于最小作用域内, 并在变量声明时进行显式初始化

四. 隐式类型转换

1. 不要定义隐式类型转换. 对于转换运算符和单参数构造函数, 请使用 explicit 关键字

五. 类

1. 类定义一般应以 public: 开始, 后跟 protected:, 最后是 private:  私有函数和私有数据可分成两个private部分书写
2. 类的数据成员都必须是私有的
3. 对于重载的虚函数(或虚析构函数), 使用 override 关键字显式地进行标记

六. 函数

1. 函数的参数顺序为: 输入参数在先, 后跟输出参数
2. 指针“*”和引用“&”等修饰符应该靠近变量名
3. 倾向于编写简短,凝练的函数(40行内)
4. 所有按引用传递的参数必须加上 const,所以函数的输入参数可以是值参,const引用或指针, 输出参数一般为指针,不使用const引用
5. 不建议使用 C++ 异常

七. 命名规则

1. 函数命名, 变量命名, 文件命名要有描述性; 少用缩写
2. 文件名要全部小写, 可以包含下划线 (_) 
3. 内联函数必须放在 .h 文件中. 如果内联函数比较短, 就直接放在 .h 中
4. 类型名称(类、结构体、枚举等)的每个单词首字母均大写, 不包含下划线: MyExcitingClass, MyExcitingEnum.
5. 变量 (包括函数参数) 和数据成员名一律小写, 单词之间用下划线连接. 类的成员变量以下划线结尾, 但结构体的就不用
6. 声明为 constexpr 或 const 的变量, 或在程序运行期间其值始终保持不变的, 推荐命名时以 “k” 开头, 大小写混合:constexpr int kDaysInWeek = 7;
7. 函数名的每个单词首字母大写,没有下划线. 对于首字母缩写的单词, 更倾向于将它们视作一个单词进行首字母大写(例如, 写作 StartRpc() 而非 StartRPC())

八. 注释规则

1. 使用 // 或 /* */,统一使用其中一种
2. 在每一个文件开头加入版权公告、许可证、作者等注释信息
3. 每个类的定义都要附带一份注释, 描述类的功能和用法
4. 基本上每个函数声明处前都应当加上注释, 描述函数的功能和用途。通常, 函数声明处的注释不会描述函数如何工作. 那是函数定义部分的事情
5. 函数定义处的注释应描述函数大致的实现步骤
6. 每个类数据成员(也叫实例变量或成员变量)和全局变量都应该用注释说明用途,除非变量名已经足以描述一个变量的用途
7. 注释以 “.” 结尾

九. 代码格式

1. 每一行代码字数应控制在一个范围
2. 函数的返回类型和函数名应在同一行,如放不下就把形参分行,分行的形参应与第一个形参左对齐(不要求分行后每行只有一个形参)
3. 函数名和其后的左圆括号间没有空格; 圆括号与参数间没有空格; 左大括号总在最后一个参数同一行的末尾处, 不另起新行;右圆括号和左大括号间总是有一个空格
4. 条件语句中 if和其后的左圆括号,以及else和其后的左大括号,以及右圆括号和左大括号之间都要加一个空格。 不在圆括号内使用空格
5. 条件语句中 else 要跟 if语句的右大括号处于同一行,并且else前后都要加空格
6. switch语句同 if 一样,switch和其后的左圆括号,以及右圆括号和其后的左大括号之间都要加一个空格
7. 句点或箭头前后不要有空格. 指针/地址操作符 (*, &) 之后不能有空格
8. 命名空间内容不缩进

十. 其他

1. 使用 C++ 的类型转换, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等C转换方式
2. 对于迭代器和其他模板对象使用前缀形式的自增(++i), 自减(--i)运算符。对简单数值 (非对象), 使用前置或后置都可
3. 在任何可能的情况下都要使用 const. (在变量或参数前加 const 用于指明变量值不可被篡改,为类中的函数加上 const 表明该函数不会修改类成员变量的状态)(提倡const放在类型之前)
4. 在 C++11 里,用 constexpr来定义真正的常量,或实现常量初始化。constexpr定义的常量表达式,会在编译时计算常量表达式结果,可以获得更好的效率和安全性
5. 整数用 0, 实数用 0.0, 指针用 nullptr 或 NULL, 字符 (串) 用 '\0'

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值