谷歌C++编码规范(3.180版)详解与实践
需积分: 6 157 浏览量
更新于2024-09-24
收藏 227KB PDF 举报
Google C++编码规范(英文版)是Google公司制定的一套关于编写高质量C++代码的标准,旨在提高代码的可读性、一致性以及维护性。此版本为第3.180次修订,由Benjy Weinberger、Craig Silverstein、Gregory Eitzmann等人共同贡献,旨在确保团队间的代码风格统一,促进协作。
1. **Header**:
- 在编写C++代码时,文件的命名和组织非常重要。Google风格指南建议使用`#define` Guard来防止文件头被多次包含,即在文件开头添加一个条件编译预处理器指令,如`#ifndef`和`#endif`,确保每个文件只被包含一次。
2. **Header File Dependencies**:
- 规范强调了依赖管理,明确指出头文件的引用顺序应遵循一定的逻辑,确保编译时的依赖关系清晰。这包括按功能模块或接口依赖性排序,减少潜在的编译错误。
3. **Inline Functions**:
- 使用inline函数可以提高性能,但需谨慎使用,因为过多的内联可能导致编译器增加不必要的代码体积。Google规范鼓励在不影响性能的前提下,通过模板或虚拟函数等其他方式实现代码复用。
4. **The .inl.h Files**:
- Google建议将实现细节(如函数体)放在`.inl.h`文件中,而非与声明文件分离,以保持代码结构清晰,但要避免过度使用,以免导致头文件过大。
5. **Function Parameter Ordering**:
- 函数参数的顺序应遵循一致性和易读性原则,通常先传递引用后传递值,常量参数在最后。
6. **Names and Order of Includes**:
- 包含的头文件应按照某种逻辑顺序排列,例如先系统库,再第三方库,最后是本项目自定义的头文件。
7. **Scoping**:
- Google提倡使用现代C++的范围(Scoped)概念,包括`auto`、`using`和`namespace`等,以提高代码可读性和减少命名冲突。
8. **Namespaces**:
- 规范推荐使用标准的命名空间组织代码,避免全局污染,同时提供清晰的命名空间层次结构。
9. **Nested Classes**:
- 对于类的嵌套,Google建议遵循一定的规则,如将成员函数与数据成员分开,以增强代码的封装性和可维护性。
10. **Nonmember, Static Member, and Global Functions**:
- 非成员函数应尽可能作为独立的外部函数实现,静态成员函数用于共享状态,全局函数仅在必要时使用,并避免滥用。
11. **Local Variables**:
- 变量声明和初始化应尽可能靠近其首次使用,遵循“就近原则”,以减少代码阅读的复杂性。
12. **Static and Global Variables**:
- 避免滥用全局变量,除非有充分的理由,如配置信息。静态成员变量应限制其生命周期和访问性。
13. **Classes**:
- 类的设计应该遵循单一职责原则,避免过度复杂,同时提供清晰的构造器和析构器行为。
14. **Doing Work in Constructors**:
- 构造器应专注于对象的初始化,而非执行业务逻辑,复杂的初始化工作应在单独的初始化函数中进行。
15. **Default Constructors, Explicit Constructors, Copy Constructors**:
- 规范规定了每种构造函数的作用和使用场景,以保证对象的正确创建和复制。
16. **Structs vs. Classes**:
- Google倾向于使用类而不是结构体,除非确实需要更轻量级的类型和更简单的继承关系。
17. **Inheritance**:
- 递归和多重继承应谨慎使用,遵循开闭原则(Open/Closed Principle),尽量使用组合(Composition)而非继承(Inheritance)。
18. **Interfaces**:
- 推崇接口(Interface)设计,通过纯虚函数和抽象类来定义接口,降低耦合度。
19. **Operator Overloading**:
- 只对必要的运算符进行重载,保持一致性,并确保不会破坏语言的内置行为。
20. **Access Control**:
- 使用适当的访问修饰符(public, private, protected)控制类成员的可见性和访问权限。
21. **Declaration Order**:
- 提倡遵循特定的声明顺序,如先公有后私有,先声明后定义,以增强代码可读性。
22. **Write Short Functions**:
- 保持函数长度简洁,易于理解和测试,遵循单一职责原则。
23. **Google-Specific**:
- 规范中还包括一些Google特有的实践,比如使用`cpplint`工具进行代码风格检查,以及一些优化技巧。
24. **Other C++ Features**:
- 介绍了一些C++特性,如引用参数、函数重载、默认参数、可变长度数组和`alloca()`的使用,以及异常处理和运行时类型信息(RTTI)的处理。
25. **Casting**:
- 关于类型转换的指导,强调避免隐式类型转换,以减少潜在的错误和难以调试的问题。
总结来说,Google C++编码规范提供了一套详尽的编码标准,涵盖了代码结构、命名规则、内存管理、类设计、函数编程等多个方面,旨在创建易于阅读、高效和可维护的C++代码。遵循这些规范有助于团队内部代码的一致性和项目的长期成功。
152 浏览量
102 浏览量
149 浏览量
2014-07-27 上传
119 浏览量
164 浏览量
208 浏览量
310 浏览量
107 浏览量
geekcn
- 粉丝: 7
- 资源: 61
最新资源
- 常见网络命令使用!!!
- 用C#实现的电子商务的文档
- proteus7.1+keil8.08
- 《AVR单片机的GCC软件设计》.pdf
- PLC控制电冰箱的灯光大小
- 全国计算机等级考试四级数据库工程师教程 课后答案
- 单片机基础教程-入门级
- 基于索引的SQL语句优化之降龙十八掌
- 如何在局域网安装Redmine(原创)
- 计算机网络答案 谢希仁
- E:\ATA认证复习题\70-228SQL Server 2000企业版的安装、配置和管理模.pdf
- Flex 性能简评:Flex 和 JavaServer Pages 应用程序的比较
- linux下的调试工具-GDB
- 2009软件设计师考试大纲
- ExtJS 最新实用简明教程
- FAT32文件系统中文版