内容提要
作者分享了学习《Google开源项目风格指南》的收获,指出C++虽复杂但适用于自动驾驶等领域,难点在于代码组织规范。指南要点包括:头文件自给自足并防止重复包含;函数应简短,按值或引用返回,避免指针;慎用缺省参数、异常和RTTI;善用const、auto和智能指针;命名具描述性、少用缩写;类中数据成员私有,多用组合;注释清晰;每行80字符、两空格缩进;保持代码风格一致。
延伸解读
C++ 的复杂性与学习门槛
作者认为 C++ 语法复杂,支持多种编程范式、模板元编程等特性,学习曲线陡峭,不像其他语言查文档就能上手。不了解这些特性容易在写代码时掉坑。但 C++ 在自动驾驶等领域仍是主流,车上平台常基于 Linux 和 C++,算法迭代和比较也最顺手,因此仍需硬着头皮学习。
代码组织规范的重要性
作者指出,对初学者而言,C++ 最大的困难是很难把代码安排得规规矩矩、整整齐齐。如果写出乱七八糟的代码,不仅自己痛苦,代码审查也不会过关。因此需要研究规范的代码,才能在大工程中把代码组织起来。Google 开源项目风格指南是目前最被认可的 C++ 规范之一。
Google 风格指南的核心要点
指南强调头文件自给自足并防止重复包含;函数应简短,按值或引用返回,避免指针;慎用缺省参数、异常和 RTTI;善用 const、auto 和智能指针;命名具描述性、少用缩写;类中数据成员私有,多用组合;注释清晰;每行 80 字符、两空格缩进;保持代码风格一致。这些规范有助于提升代码可读性和可维护性。
风格一致性与局部适配
指南指出,风格的重点在于提供通用规范,让开发者集中精力在实现内容而非表现形式上。但局部风格也很重要,新加代码应与文件原有风格保持一致,避免破坏整体美观和阅读节奏。对于现有不符合既定风格的代码可以网开一面,运用常识和判断力,并保持一致性。
Q&A
C++ 在自动驾驶领域为什么仍然被广泛使用?
因为车上平台可能基于 Linux 和 C++,且自动驾驶算法还处于百花齐放的状态,用 C/C++ 最顺手,最容易迭代和比较(copy)。
Google 开源项目风格指南对头文件有哪些主要要求?
头文件应自给自足,以 .h 结尾;用 #define 保护防止多重包含;避免前置声明,用 #include 包含所需头文件;内联函数仅限 10 行以内;包含顺序为:相关头文件、C 库、C++ 库、其他库的 .h、本项目内的 .h。
在函数设计上,Google C++ 风格指南推荐哪些做法?
倾向于按值返回,否则按引用返回,避免返回指针(除非可为空);函数应简短凝练;重载函数需让调用点一目了然;只允许在非虚函数中使用缺省参数且值一致;一般情况下建议使用函数重载;返回类型后置仅在常规写法不便时使用。
Google C++ 风格指南对命名有哪些具体约定?
命名要有描述性,少用缩写;文件名全小写,可含下划线或连字符;类型名每个单词首字母大写,不含下划线;变量和数据成员名小写,单词间用下划线,类成员变量以下划线结尾,结构体不用;常量以 k 开头;常规函数大小写混合,取值/设值函数与变量名匹配;命名空间小写;枚举命名同常量或宏;宏命名全大写加下划线。
Google C++ 风格指南对代码格式有哪些关键规定?
每行不超过 80 字符;尽量不用非 ASCII 字符,使用时必须 UTF-8;只使用空格,每次缩进 2 个空格;返回类型和函数名同行,参数尽量同行;函数调用格式统一;if 和 else 另起一行;switch 可用大括号分段;句点或箭头前后无空格;指针/地址操作符后无空格;预处理指令不缩进;访问控制块按 public、protected、private 顺序缩进 1 空格;构造函数初始化列表同行或四格缩进;命名空间内容不缩进;水平留白合理,垂直留白越少越好。
Google C++ 风格指南对类有哪些设计建议?
不要在构造函数中调用虚函数;使用 explicit 关键字防止隐式转换;按需支持拷贝/移动,否则禁用;仅当只有数据成员时用 struct,否则用 class;多用组合少用继承,继承用 public;多重继承仅允许最多一个非抽象基类,其他为纯接口类(以 Interface 为后缀);所有数据成员声明为 private(static const 除外);声明次序 public -> protected -> private;函数体尽量短小紧凑。