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

相关推荐
IvanCodes5 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae6 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
qq_2518364579 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理10 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868710 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
+VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长11 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
2401_8390805411 小时前
C++常见八股
数据结构·c++·算法
qq_1998868711 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力