0. 扉页

:版本: 4.45

:原作者:

.. line-block::

     Benjy Weinberger
     Craig Silverstein
     Gregory Eitzmann
     Mark Mentovai
     Tashana Landray

:翻译:

.. line-block::

    `YuleFox <http://www.yulefox.com>`_
    `Yang.Y <https://github.com/yangyubo>`_
    `acgtyrant <http://acgtyrant.com>`_
    `lilinsanity <http://github.com/lilinsanity>`_

:项目主页:

- `Google Style Guide <http://google-styleguide.googlecode.com>`_
- `Google 开源项目风格指南 - 中文版 <http://github.com/zh-google-styleguide/zh-google-styleguide>`_

0.1 译者前言

Google 经常会发布一些开源项目,意味着会接受来自其他代码贡献者的代码。但是如果代码贡献者的编程风格与 Google 的不一致,会给代码阅读者和其他代码提交这造成不小的困扰。Google 因此发布了这份自己的编程风格指南,使所有提交代码的人都能获知 Google 的编程风格。

翻译初衷:

规则的作用就是避免混乱,但规则本身一定要权威,有说服力,并且是理性的。我们所见过的大部分编程规范,其内容或不够严谨,或阐述过于简单,或带有一定的武断性。

Google 保持其一贯的严谨精神,5 万汉字的指南涉及广泛,论证严密。我们翻译该系列指南的主因也正是其严谨性,严谨意味着指南的价值不仅仅局限于它罗列出的规范,更具参考意义的是它为了列出规范而做的谨慎权衡过程。

指南不仅列出你要怎么做,还告诉你为什么要这么做,哪些情况下可以不这么做,以及如何权衡其利弊。其他团队未必要完全遵照指南亦步亦趋,如前面所说,这份指南是 Google 根据自身实际情况打造的,适用于其主导的开源项目。其他团队可以参照该指南,或从中汲取灵感,建立适合自身实际情况的规范。

我们在翻译的过程中,收获颇多,希望本系列指南中文版对你同样能有所帮助。

我们翻译时也是尽力保持严谨,但水平所限,bug 在所难免,有任何意见或建议,可与我们取得联系。

中文版和英文版一样,使用 Artistic License/GPL 开源许可。

中文版修订历史:

- 2015-08 : 热心的清华大学同学 @lilinsanity 完善了「类」章节以及其它一些小章节。至此,对 Google CPP Style Guide 4.45 的翻译正式竣工。

- 2015-07 4.45 : acgtyrant 为了学习 C++ 的规范,顺便重新翻译了本 C++ 风格指南,特别是 C++11 的全新内容。排版大幅度优化,翻译措辞更地道,添加了新译者笔记。Google 总部 C++ 工程师 innocentim, 清华大学不愿意透露姓名的唐马儒先生,大阪大学大学院情报科学研究科计算机科学专攻博士 farseerfc 和其它 Arch Linux 中文社区众帮了译者不少忙,谢谢他们。因为 C++ Primer 尚未完全入门,暂时没有翻译「类」章节和其它一些小章节。

- 2009-06 3.133 : YuleFox 的 1.0 版已经相当完善,但原版在近一年的时间里,其规范也发生了一些变化。

    Yang.Y 与 YuleFox 一拍即合,以项目的形式来延续中文版:`Google 开源项目风格指南 - 中文版项目 <http://github.com/yangyubo/zh-google-styleguide>`_。

    主要变化是同步到 3.133 最新英文版本,做部分勘误和改善可读性方面的修改,并改进排版效果。Yang.Y 重新翻修,YuleFox 做后续评审。

- 2008-07 1.0 : 出自 `YuleFox 的 Blog <http://www.yulefox.com/?p=207>`_,很多地方摘录的也是该版本。

0.2 背景

C++ 是 Google 大部分开源项目的主要编程语言。正如每个 C++ 程序员都知道的,C++ 有很多强大的特性,但这种强大不可避免的导致它走向复杂,使代码更容易产生 bug,难以阅读和维护。

本指南的目的是通过详细阐述 C++ 注意事项来驾驭其复杂性。这些规则在保证代码易于管理的同时,也能高效使用 C++ 的语言特性。

风格,亦被称作可读性,也就是指导 C++ 编程的约定。使用术语风格有些用词不当,因为这些习惯远不止源代码文件格式化这么简单。

使代码易于管理的方法之一是加强代码一致性,让任何程序员都可以快速读懂你的代码这点非常重要。保持统一的编程风格并遵守约定意味着可以很容易根据“模式匹配”规则来推断各种标识符的含义。创建通用、必需的习惯用语和模式可以使代码更容易理解。在一些情况下可能有充分的理由来改变某些编程风格,但我们还是应该遵循一致性原则,尽量不这么做。

本指南的另一个观点是 C++ 特性的臃肿。C++ 是一门包含大量高级特性的庞大语言。某些情况下,我们会限制甚至禁止使用某些特性。这么做是为了保持代码清爽,避免这些特性可能导致的各种问题。指南中列举了这类特性,并解释为什么这些特性被限制使用。

Google 主导的开源项目均符合本指南的规定。

注意:本指南并非 C++ 教程,我们假定读者已经对 C++ 非常熟悉。