为了账号安全,请及时绑定邮箱和手机立即绑定

谷歌C++编程风格指南要点解析

标签:
C++

Google 的 C++ 代码风格指南提供了一套全面的规则和建议,旨在保证 C++ 代码的一致性、可读性和可维护性,尤其是对于大型代码库。以下是一些关键规则的概述,来自该指南。

1. 命名规范
  • 变量命名: 使用 snake_case 命名变量(例如:my_variable)。
  • 函数命名: 使用 CamelCase 命名函数(例如:DoSomething)。
  • 类命名: 使用 CamelCase 命名类(例如:MyClass)。
  • 常量命名: 使用 kCamelCase 命名常量(例如:kMaxValue)。
  • 命名空间命名: 使用 snake_case 命名命名空间(例如:namespace my_namespace)。
2. 头文件 (Header Files)
  • 文件扩展名: 使用 .h 作为头文件扩展名,使用 .cpp 作为源代码文件扩展名。
  • 包含保护: 每个头文件都应该包含 #ifndef#define#endif 防护,以避免重复包含(或者使用 #pragma once)。
  • 包含顺序: 按照以下顺序包含头文件:相关的头文件、C++ 标准库头文件、其他库头文件、项目头文件。
3. 格式化:
  • 缩进: 每缩进层级使用2个空格,不使用制表符。

  • 行长度: 限制每行长度在80个字符以内。在特定情况下允许使用更长的行,但应尽量减少。

  • 大括号: 使用K&R风格的大括号(即Allman风格):

  • 空格: 在运算符周围和逗号后面使用空格。括号内部不使用空格。
  • 注释: 单行注释采用 //,多行注释则采用 /* ... */
4. 班级.
  • 访问权限: 默认情况下优先使用 private 成员和方法;仅在必要时使用 publicprotected
  • 构造函数: 使用初始化列表来定义构造函数体。
  • 成员变量: 使用带有尾随下划线的 snake_case 形式来命名成员变量(例如 int my_variable_;)。
  • 显式构造函数: 将单参数构造函数标记为 explicit 以防止隐式转换。
5. 功能
  • 函数声明: 尽量在一行中放置返回类型和函数名。
  • 重载和默认参数: 避免重载函数,而是使用能明确表示不同行为的函数名。可以使用默认参数,但要谨慎地使用它们。
  • 静态函数: 对于只在一个文件内使用的函数,使用 static
  • 内联函数: 在头文件中直接定义简短简单的函数。
6. 内存管理
  • 智能指针: 建议优先使用 std::unique_ptrstd::shared_ptr 来管理动态内存,而不是使用原始指针。
  • 明确说明资源的所有权和生命周期: 清晰地记录资源的所有权和生命周期预期。
  • RAII (资源获取即初始化): 使用 RAII 来管理资源,比如内存、文件句柄或锁。
7. 并发
  • 线程安全: 确保多线程访问的函数线程安全。
  • 互斥锁和加锁: 使用 std::mutexstd::lock_guard 进行加锁。避免使用裸的 pthread_mutex_t
  • 原子操作: 使用 std::atomic 进行原子操作,而不是使用原始的原子变量。
8 错误处理技巧
  • 异常处理: 在适当的情况下使用异常来处理错误,但避免在性能关键代码或实时系统中使用异常。
  • 返回状态码: 在使用广泛的API或不适合使用异常的情况下使用返回状态码。
  • 断言: 使用 assert() 进行内部一致性检查,确保在运行时不会出错。
9. 模板
  • 模板的使用: 使用模板来编写通用代码,但要避免过度使用,因为这可能会导致代码膨胀问题。
  • 模板特化: 避免部分特化函数模板的行为,因为它可能会很复杂并且容易出错。
第10章:风格与最佳实践
  • 避免使用宏: 优先使用 constexprinline 或模板函数,而不是宏。
  • 避免使用非 const 全局变量: 避免使用非 const 全局变量,因为它们可能导致隐藏的依赖关系和状态。
  • 谨慎使用 auto:auto 能提高代码可读性的场合使用,但当类型不明确时避免使用。
  • 常量正确性原则: 对于不修改对象的方法,使用 const 标记。
11. 测试.
  • 编写所有非平凡代码的单元测试。
  • Google Test框架:使用Google Test框架来编写并运行测试。
12. 代码审查会议
  • 代码审查流程: 在合并到主代码库之前,所有代码必须由第二个人进行审查。
  • 审查目标: 主要目标是保持代码的质量、一致性和可读性,而不仅仅是找出错误。

这些指南旨在编写高质量、易于维护且一致的C++代码,适合大规模项目和团队使用。如需更多细节,可参考完整的Google C++编码风格指南。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消