哈喽,小伙们大家好!我是csdn的猫哥。今天给大家分享下google c++编码规范的核心要点总结。如果去直接看规范的话,也可以,但是篇幅很长显得零碎。这里只总结核心要点,让你看一遍就记住。分享给有需要的小伙伴,喜欢的可以点赞收藏。
这里只总结核心要点,避免长篇大论,让你看一遍就记住。分享给有需要的小伙伴。
这份总结基于 Google C++ Style Guide 的核心精髓。Google 规范的最高宗旨是:代码的"可读性"与"一致性"高于一切。
为了方便记忆,我将长篇大论浓缩为以下五个核心维度:
最高宗旨:代码的"可读性"与"一致性"高于一切!
这份规范旨在塑造清晰、统一且易于维护的 C++ 代码库。
原规范文档链接(Google 开源项目风格指南 (中译版)):https://svlab.nuaa.edu.cn/_upload/article/files/39/64/4490c60941228ff49774f083bf88/eb21be02-26a4-4b00-82cf-22bcc777b713.pdf
英文原版地址:https://github.com/google/styleguide
https://google.github.io/styleguide/cppguide.html

其精髓可浓缩为以下五大核心维度:
一、 头文件与作用域 (Scope & Headers)
构建整洁结构,避免冲突。
- 自给自足: 头文件必须独立编译,显式包含其所有依赖。
- 防范宏 (Include Guards): 强制使用
#ifndef FOO_BAR_H_格式防止重复包含。 - 内联函数: 仅在函数体极短小(通常 ≤ 10 行) 时使用
inline。 - 命名空间:
- 必须 将代码置于命名空间中(禁用全局命名空间)。
- 禁止
using namespace std;(防止全局命名空间污染)。 - 鼓励在
.cc文件中使用匿名命名空间封装局部辅助函数/变量。
二、 类与对象 (Classes)
核心理念:简单与明确
- 构造函数:
- 避免在其中执行复杂或可能失败的初始化操作。
- 单参数构造函数必须使用
explicit防止意外隐式转换。
- 组合 vs 继承: 优先选择组合(Composition) 。若必须继承,仅使用
public继承。 - 声明顺序: 类成员严格按
public:->protected:->private:顺序声明。 - 结构体 vs 类:
struct仅用于纯数据聚合 ;只要包含方法(行为),必须使用class。
三、 现代 C++ 特性 (Modern C++)
允许但谨慎,有明确边界
- 智能指针: 优先使用
std::unique_ptr。仅在确需共享所有权 时使用std::shared_ptr。严禁auto_ptr。 - 空指针: 永远使用
nullptr,禁止NULL或0。 auto关键字: 仅限用于类型冗长(如迭代器) 或显著提升可读性 的场景。避免滥用导致类型信息隐藏。- 右值引用: 只用于实现移动语义 (
std::move) 和完美转发 (std::forward)。
四、 命名约定 (Naming Conventions)
强制执行视觉统一性
| 类型 | 格式 | 示例 |
|---|---|---|
| 文件名称 | 全小写 + 下划线 | my_class.cc, http_server.h |
| 类/结构体/枚举 | 帕斯卡拼法 (大驼峰) | MyExcitingClass, UrlTable |
| 局部变量 | 全小写 + 下划线 | local_variable, index |
| 类成员变量 | 全小写 + 结尾下划线 | health_points_, name_ |
| 函数/方法 | 帕斯卡拼法 (大驼峰) | DoSomething(), GetValue() |
常量 (const) |
k开头 + 驼峰 |
kDaysInAWeek, kMaxBuffer |
| 宏定义 | 全大写 + 下划线 | #define MY_MACRO_VALUE |
(关键细节:成员变量后缀 _ 是重要标志!)
五、 核心编程原则 (Best Practices)
良好习惯的基石
- 输入与输出参数:
- 输入参数: 优先使用
const T&(常量引用)。 - 输出参数: 必须使用指针
T*(如void Parse(const string& input, int* result))。调用时Parse(str, &val)清晰表明val会被修改。
- 输入参数: 优先使用
- 类型转换: 严禁 C 风格强制转换
(int)x。必须使用 C++ 风格转换 :static_cast,const_cast,reinterpret_cast。 - 初始化: 变量定义时必须立即初始化,防止未定义行为。
- 注释:
- 统一使用
//注释。 - 头文件(.h): 注释重点说明 "做什么"(What)。
- 实现文件(.cc): 注释重点说明 "如何做"(How) 及实现细节。
- 统一使用
Google C++ 风格核心口诀
- 显式优于隐式 -- 明确类型(
explicit)、明确转换、避免隐晦操作。 - 组合优于继承 -- 降低耦合,提升模块化与灵活性。
- 清晰优于精简 -- 变量/函数名宁可稍长,也要准确表达意图。
- 一致性高于一切 -- 团队统一风格是首要准则,个人偏好须让步。
工具推荐:自动化检测
cpplint: Google 官方提供的开源工具,集成到编辑器或构建流程中,自动检查代码并标记违反规范之处。务必利用工具解放大脑,专注逻辑!