Google C++编程规范详解
5星 · 超过95%的资源 需积分: 4 166 浏览量
更新于2024-09-25
收藏 516KB PDF 举报
"Google C++代码规范"
Google的C++编程规范是一份详尽的指导文档,旨在提升代码质量、可读性和团队协作效率。以下是规范的一些关键要点:
**一、头文件**
1. **#define的保护**:避免在头文件中使用#define,除非有特殊需求,通常使用const或enum代替。
2. **头文件依赖**:每个头文件应包含它所需要的最小数量的其他头文件,并使用`#include guards`防止重复包含。
3. **内联函数**:内联函数用于小且频繁调用的函数,可以减少函数调用的开销,但应谨慎使用,以防止编译器拒绝内联。
4. **-inl.h文件**:将内联函数定义放在单独的-inl.h文件中,以分离接口与实现,同时允许用户选择是否包含内联定义。
5. **函数参数顺序**:通常按照“常量参数 - 输出参数 - 输入参数”的顺序排列。
6. **包含文件的名称及次序**:头文件通常按照它们在代码中的逻辑关系和依赖性来组织和包含。
**二、作用域**
1. **命名空间**:使用命名空间避免名字冲突,推荐使用`using namespace`声明,但避免在全局作用域中使用。
2. **嵌套类**:用于封装和隐藏数据,或者与父类有紧密关联的辅助类。
3. **非成员函数、静态成员函数和全局函数**:非成员函数作为友元,提供类操作的另一种方式;静态成员函数不与特定对象关联;全局函数应尽可能减少,避免作用域污染。
4. **局部变量**:避免在函数中使用全局变量,使用局部变量并确保其作用域尽可能小。
5. **全局变量**:尽量少用全局变量,因为它们可能引入不必要的依赖和复杂性。
**三、类**
1. **构造函数**:负责初始化对象状态,不应执行复杂操作。
2. **默认构造函数**:无参数的构造函数,用于创建默认初始化的对象。
3. **明确的构造函数**:使用`explicit`关键字防止隐式类型转换,减少意外行为。
4. **拷贝构造函数**:处理对象复制的情况,确保深拷贝或浅拷贝正确。
5. **结构体与类**:类通常用于表示带有私有数据和封装的“对象”,而结构体主要用来做数据聚合,但两者在C++中区别不大。
6. **继承**:用于实现IS-A关系,子类继承父类的属性和方法。
7. **多重继承**:谨慎使用,可能导致歧义和复杂性。
8. **接口**:使用抽象基类或纯虚函数定义接口,实现多态。
9. **操作符重载**:使类更加自然地使用,但需谨慎,确保符合操作符的语义。
10. **存取控制**:使用`public`, `private`, `protected`控制成员的访问权限。
11. **声明次序**:成员变量在前,成员函数在后,构造函数在成员变量之后。
12. **编写短小函数**:保持函数单一职责,提高可读性和可测试性。
**四、Google特有的风情**
1. **智能指针**:如`std::unique_ptr`, `std::shared_ptr`等,自动管理内存,防止内存泄漏。
**五、其他C++特性**
1. **引用参数**:引用提供了一个别名,保证传递的是原始值的引用,而非副本。
2. **函数重载**:相同函数名但参数列表不同的多个函数,为不同功能提供简洁的接口。
3. **缺省参数**:允许函数调用时部分参数不指定值,使用缺省值。
4. **变长数组和alloca()**:不推荐使用,因为可能导致内存问题和栈溢出。
5. **友元**:非成员函数或类可以访问另一个类的私有和保护成员,但应谨慎使用,因为它破坏了封装。
6. **异常**:用于处理程序运行时的错误,确保异常安全的代码设计。
遵循这些规范,开发者可以编写出更高效、可维护和团队友好的C++代码。
2018-03-30 上传
707 浏览量
2016-02-19 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-07-10 上传
meditator_bi
- 粉丝: 15
- 资源: 5
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜