Google C++ 编码规范核心要点总结 (2025精简版)

哈喽,小伙们大家好!我是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 ,禁止 NULL0
  • 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 官方提供的开源工具,集成到编辑器或构建流程中,自动检查代码并标记违反规范之处。务必利用工具解放大脑,专注逻辑!

其他资源

https://blog.csdn.net/m0_46128531/article/details/149637437

相关推荐
草莓熊Lotso2 小时前
Linux 基础 IO 初步解析:从 C 库函数到系统调用,理解文件操作本质
linux·运维·服务器·c语言·数据库·c++·人工智能
梵刹古音2 小时前
【C语言】 字符数组相关库函数
c语言·开发语言·算法
闻缺陷则喜何志丹2 小时前
P8699 [蓝桥杯 2019 国 B] 排列数|普及+
c++·数学·蓝桥杯·数论·洛谷·数列
D_evil__8 小时前
【Effective Modern C++】第三章 转向现代C++:16. 让const成员函数线程安全
c++
微风中的麦穗8 小时前
【MATLAB】MATLAB R2025a 详细下载安装图文指南:下一代科学计算与工程仿真平台
开发语言·matlab·开发工具·工程仿真·matlab r2025a·matlab r2025·科学计算与工程仿真
2601_949146538 小时前
C语言语音通知API示例代码:基于标准C的语音接口开发与底层调用实践
c语言·开发语言
开源技术8 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
学嵌入式的小杨同学8 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
Queenie_Charlie9 小时前
前缀和的前缀和
数据结构·c++·树状数组
mftang10 小时前
Python 字符串拼接成字节详解
开发语言·python