google C++编程规范
Google C++编程规范是一份由谷歌公司制定的用于指导其内部C++编程的标准文档,旨在提升代码的可读性、可维护性和团队协作效率。这份规范包含了多个方面,包括但不限于头文件管理、命名规则、注释风格、格式化以及特定C++特性使用等。 1. **头文件管理**: - **`#define` Guard**:每个头文件都应该包含一个唯一的`#define`预处理器指令,防止重复包含。 - **Header File Dependencies**:头文件应仅包含必要的依赖,减少间接依赖。 - **`-inl.h` 文件**:将内联函数放在单独的`.inl.h`文件中,以分离接口与实现。 2. **函数参数**: - **参数顺序**:通常,输入参数在前,输出参数在后。 - **命名和包含顺序**:包含文件时,先包含项目内的文件,再包含系统文件。 3. **作用域和命名**: - **命名空间**:利用命名空间避免名称冲突。 - **嵌套类**:谨慎使用,主要用于封装。 - **非成员函数、静态成员函数和全局函数**:根据功能选择合适的定义位置。 4. **变量**: - **局部变量**:尽可能减少作用域,尽早初始化。 - **静态和全局变量**:避免使用,除非必要,因为它们可能导致意外的共享和难以调试的问题。 5. **类设计**: - **构造函数**:做最少的工作,确保默认构造函数和拷贝构造函数适当。 - **显式构造函数**:使用`explicit`关键字防止隐式类型转换。 - **结构体与类**:根据是否包含数据成员和操作来选择。 - **继承**:慎用多重继承,更倾向于单一继承和接口。 - **运算符重载**:仅当逻辑上合理时才重载。 - **访问控制**:明确指定`public`、`private`和`protected`。 6. **其他C++特性**: - **智能指针**:使用`std::unique_ptr`、`std::shared_ptr`等代替原始指针。 - **cpplint**:谷歌的C++代码检查工具,用于自动化代码审查。 - **C++0x及以后版本的新特性**:如`auto`、`lambda`等,鼓励使用现代C++特性。 - **RTTI**:在需要动态类型检查时使用,但应谨慎。 - **类型转换**:避免使用旧式C-style转换,推荐使用`static_cast`、`const_cast`等。 - **流(Streams)**:使用`std::iostream`进行输入输出操作。 7. **命名规则**: - **一般命名规则**:遵循一致的命名约定,如驼峰命名法。 - **文件名、类型名、变量名、常量名、函数名**:都有各自的命名规范。 - **命名空间名、枚举器名、宏名**:清晰反映其用途和作用。 8. **注释**: - **注释风格**:使用多行注释,简洁明了。 - **文件注释**:描述文件内容和目的。 - **类注释**:解释类的职责和用法。 - **函数注释**:概述函数的作用、参数和返回值。 - **变量注释**:说明变量的用途和初始状态。 - **实现注释**:解释特殊情况或复杂代码。 - **TODO 注释**:标记待解决的问题或待优化的地方。 - **弃用注释**:表明已不再推荐使用的代码。 9. **格式化**: - **行长度**:通常限制在80字符以内。 - **非ASCII字符**:避免在代码中使用,除非绝对必要。 - **空格与制表符**:使用空格而非制表符,保持一致性。 - **函数声明与定义**、**函数调用**、**条件语句**、**循环和switch语句**、**指针和引用表达式**、**布尔表达式**、**返回值**、**变量和数组初始化**、**预处理器指令**、**类格式**、**构造函数初始化列表**、**命名空间格式**、**水平和垂直空白**:都有明确的格式要求。 10. **异常处理**:合理使用异常,提供异常安全的代码,并考虑异常传播的影响。 这些规范确保了谷歌代码库的一致性和质量,有助于提高代码的可读性和可维护性。尽管是谷歌的内部规范,但它们对任何C++开发者都具有很高的参考价值。
剩余52页未读,继续阅读
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于javaweb的网上拍卖系统,采用Spring + SpringMvc+Mysql + Hibernate+ JSP技术
- polygon-mumbai
- Chrome代理 switchyOmega
- GVC-全球价值链参与地位指数,基于ICIO表,(Wang等 2017a)计算方法
- 易语言ADS指纹浏览器管理工具
- 易语言奇易模块5.3.6
- cad定制家具平面图工具-(FG)门板覆盖柜体
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt