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

相关推荐
李余博睿(新疆)2 小时前
c++经典练习题-分支练习(2)
c++·算法
快乐非自愿2 小时前
Java函数式接口——渐进式学习
java·开发语言·学习
爱吃大芒果2 小时前
Flutter 表单开发实战:表单验证、输入格式化与提交处理
开发语言·javascript·flutter·华为·harmonyos
福尔摩斯张2 小时前
TCP/IP网络编程深度解析:从Socket基础到高性能服务器构建(超详细)
linux·运维·服务器·开发语言·网络·网络协议·tcp/ip
superman超哥2 小时前
仓颉语言中网络套接字封装的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
wanghowie2 小时前
01.01 Java基础篇|语言基础与开发环境速成
java·开发语言
白露与泡影2 小时前
2026年Java面试题目收集整理归纳(持续更新)
java·开发语言·面试
暗然而日章2 小时前
C++基础:Stanford CS106L学习笔记 11 Lambdas表达式
c++·笔记·学习
辞旧 lekkk2 小时前
【c++】c++11(上)
开发语言·c++·学习·萌新