Google C++ Style Guide 阅读笔记 1

Background

C++是谷歌开源项目的主要使用语言,虽然Google Code 黄了。C++是很强大的语言,以致于增加了其复杂性。为了让代码被其他程序员看懂,减少出bug的可能,所以有了这个谷歌C++风格指导。

Header Files

  • 每个.cc文件都应该与一个.h文件关联,除非是单元测试或者只包含一个main();

The #define Guard

  • 每个头文件都应该避免被重复包含。宏定义可以用PROJECT_PATH_FILE_H_ 的格式。

    例如:

    #ifndef FOO_BAR_BAZ_H_

    #define FOO_BAR_BAZ_H_

    #endif // FOO_BAR_BAZ_H_

  • 在前置声明能够满足的情况下,不要使用#include. 头文件的改变将引起包含它的文件重新编译,因此推荐最小包含原则,尤其是包含其他头文件的头文件。

    比如,需要使用File Class 但不需要使用该类的定义声明时,你可以在头文件里使用前置声明 class File 替代 #include “file/base/file.h”

    在头文件不获取Foo定义的时候,如何使用Foo Class呢?

    • 使用Foo * 或者 Foo & 声明数据成员。
    • 可以在函数声明里作为定义和返回值。
    • 使用静态数据成员,静态成员是在类外部定义的。

      但如果你的类是Foo的子类或者有Foo类型的数据成员,那就包含头文件。不要过度追求减少头文件包含,引起代码复杂度提高和性能消耗。

时间: 2024-08-29 11:27:50

Google C++ Style Guide 阅读笔记 1的相关文章

Google C++ Style Guide 阅读笔记 系列

Google C++ 编程风格手册里面提到了许多编程时需要注意到的问题,对规范代码还是有帮助的.这里是一些阅读时的笔记,也算是归纳的一些要点. - Google C++ Style Guide 阅读笔记 1 - Google C++ Style Guide 阅读笔记 2 - Google C++ Style Guide 阅读笔记 3 - Google C++ Style Guide 阅读笔记 4 - Google C++ Style Guide 阅读笔记 5 - Google C++ Style

Google C++ Style Guide 阅读笔记 4

类 构造函数中的工作 通常,构造函数中只对成员变量设置初值,复杂的初始化请使用Init(). 信号错误难以处理,禁止使用exceptions. 如果初始化失败,那对象就创建失败了,造成未知状态. 如果在构造函数中调用虚函数,这些调用不能传给子函数的实现.即使现在没有子函数,但对以后的优化造成隐患. 如果其中调用了全局变量,构造将在main()之前进行,可能导致构造函数中的隐式假设失败,比如全局变量初始化失败. 总结:如果你的对象不处理复杂的初始化,请显式地使用Init(),在构造函数里不要调用虚

Google C++ Style Guide 阅读笔记 2

Inline Functions 10行以上的函数不要内联. 可以使用编译器自动内联. Function Parameter Ordering 参数顺序: 输入, 输出 输入通常是值或者常量引用 Names and Order of Includes 举例,在dir/foo.h 中: dir/foo.h C system files C++ system files Other libraries .h files Your project's .h files

Google C++ Style Guide 阅读笔记 3

命名空间 在.cc文件中推荐使用无命名的命名空间,但不要在头文件中使用.例如, namespace{ -- } 命名空间应包裹include, 全局定义.声明和其他命名空间的前置声明之后的一切代码: // in the .h file namespace mynamespace{ // All declarations are within the namespace scope Class MyClass{ public: - void Foo(); } } } // in the .cc f

Google C++ Style Guide的哲学

Google C++ Style Guide并不是一个百科全书,也不是一个C++使用指南,但它描述适用于Google及其开源项目的编码指南,并不追求全面和绝对正确,也有许多人置疑它的一些规则.但作为一个最具影响力的编码规范,它里面有许多内容值得我们研究学习. 以下主要摘自GSG负责人Titus Winters在CppCon 2014上的演讲. 制订Google C++ Style Guide的目的 引导开发去做对的事,同时不易犯错. 哲学总结 关注于读者,而非作者 (Optimize for t

一张图总结Google C++编程规范(Google C++ Style Guide)

Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条重要建议: 1 保持一致也很重要,假设你在一个文件里新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的总体美观也影响阅读,所以要尽量避免. 2 一些条目往往有例外,比方以下这些,所以本图不能取代文档,有时间还是把PDF认真阅读一遍吧. 异常在測试框架中确实非常好用 RTTI在某些单元測试中很

Google File System 论文阅读笔记

核心目标:Google File System是一个面向密集应用的,可伸缩的大规模分布式文件系统.GFS运行在廉价的设备上,提供给了灾难冗余的能力,为大量客户机提供了高性能的服务. 1.一系列前提 GFS的系统构建针对其自身使用的特点在传统的分布式系统的基础上又进行了一些创新,基于的前提假设主要包括以下方面: 1.由于系统由廉价的商用机构成,组件失效被认为是一种常态,系统必须可以持续监控自身的状态. 2.系统存储以大文件为主,小文件也支持,但是没有进行特别的优化处理. 3.系统的工作负载主要包含

Google C++ style guide——C++类

1.构造函数的职责 构造函数中只进行那些没有实际意义的初始化,因为成员变量的"有意义"的值大多不在构造函数中确定. 可以的话,使用Init()方法集中初始化为有意义的数据. 优点:排版方便,无需担心类是否初始化. 缺点: 1)在构造函数中不易报告错误,不能使用异常: 2)操作失败会造成对象初始化失败,引起不确定状态: 3)构造函数内调用虚函数,调用不会派发到子类实现中,即使当前没有子类化实现,将来仍是隐患: 4)如果有人创建该类型的全局变量,构造函数将在main()之前被调用,有可能破

Google Java Style Guide

http://google.github.io/styleguide/javaguide.html Google Java Style Guide Table of Contents 1 Introduction 1.1 Terminology notes 1.2 Guide notes 2 Source file basics 2.1 File name 2.2 File encoding: UTF-8 2.3 Special characters 3 Source file structur