1.#define保护

使用#define防止头文件被多重包括。命名格式为:<PROJECT>_<PATH>_<FILE>_H_

比如,foo中的头文件foo/src/bar/baz.h

#ifndef FOO_BAR_BAZ_H_

#define FOO_BAR_BAZ_H_

...

#endif //FOO_BAR_BAZ_H_

2.头文件依赖

使用前置声明尽量降低.h文件里#include的数量。

头文件被更改时,须要又一次编译。那些包括了该头文件的代码也须要又一次编译,因此,我们应该实现尽可能少的在头文件里包括头文件。

前置声明能够明显的降低须要包括的头文件数量。假如你在一个头文件里须要用到类File,但不须要訪问File的声明,则头文件仅仅需前置声明class File。

在下面情况能够使用类Foo而无需訪问类的定义。

1)将数据成员类型声明为Foo *或者Foo &;

2)參数、返回值类型为Foo的函数仅仅是声明(不在头文件内定义实现);

3)静态数据成员的类型能够被声明为Foo(由于静态数据成员的定义在类定义之外)。

假设你的类是Foo的子类,或者含有类型为Foo的非静态数据成员,则必须为之包括头文件。

有时,使用指针成员替代对象成员的确更有意义。可是,这种做法会减少代码可读性及运行效率。假设只为了少包括头文件,还是不要替代比較好。

当然,.cc或者.cpp不管怎样都须要所使用类的定义部分,自然也就会包括若干头文件。

3.内联函数

仅仅有当函数仅仅有10行甚至更少时才会将其定义为内联函数。

当函数被声明为内联函数之后,编译器可能会将其内联展开,无需按通常的函数调用机制调用内联函数。

长处:当函数体比較小的时候,内联该函数能够令目标代码更加高效。比如存取函数,以及其它一些比較短的关键运行函数。

缺点:滥用内联将导致程序变慢,内联有可能使目标代码量或增或建,这取决与被内联的函数的大小。内联较短小的存取函数一般会降低代码量,但内联一个非常大的函数(假设编译器同意的话),将显著添加�代码量。

在如今处理器上,因为更好的利用指令缓存,小巧的代码往往运行更快。

一个比較得当的处理规则是,不要内联超过10行的函数。对于析构函数应谨慎对待,析构函数往往比其表面看起来要长,由于有一些隐式成员和基类析构函数(假设有的话)被调用。

虚函数和递归函数即使被声明为内联的,也不一定就是内联函数。通常,递归函数不应该被声明为内联的(递归调用堆栈的展开并不像循环那么简单,比方递归层数在编译时可能是未知的,大多数编译器都不支持内联递归函数)。析构函数内联的主要原因是其定义在类的定义中,为了方便抑或是对其行为给出文档。

4.-inl.h文件

复杂的内联函数的定义,应放在后缀名为-inl.h的头文件里。

在头文件里给出内联函数的定义,可令编译器将其在调用出内联展开。然后,实现代码应全然放到.cc文件里,我们不希望.h文件里出现太多实现代码,除非这样做在可读性和效率上有明显优势。

假设内联函数的定义比較短小、逻辑比較简单,事实上现代码能够放在.h文件里。比如,存取函数的实现理所当然都放在类定义中。处于实现和调用的方便,较复杂的内联函数也能够放到.h文件里,假设你认为这样会使头文件显得笨重,还能够将其分离到单独的-inl.h中。这样即把实现和类定义分离开来,当须要时包括实现所在的-inl.h就可以。

相同的,-inl.h也是须要#define保护的。

5.函数參数顺序

定义函数事,參数顺序为:输入參数在前,输出參数在后。

6.将包括次序标准化可增强可读性、避免隐藏依赖,次序例如以下:C库、C++库、其它库的.h、项目内的.h。

同样文件夹下头文件按字母序是不错的选择。

Google C++ style guide——头文件的更多相关文章

  1. Google C++ Style Guide在C++11普及后的变化

    转 http://www.cnblogs.com/chen3feng/p/5972967.html?from=timeline&isappinstalled=0&lwfrom=user ...

  2. Google C++ Style Guide的哲学

    Google C++ Style Guide并不是一个百科全书,也不是一个C++使用指南,但它描述适用于Google及其开源项目的编码指南,并不追求全面和绝对正确,也有许多人置疑它的一些规则.但作为一 ...

  3. [Guide]Google C++ Style Guide

    0.0 扉页 项目主页 Google Style Guide Google 开源项目风格指南 -中文版 0.1 译者前言 Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. ...

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

    Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...

  5. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  6. Google Shell Style Guide

    转自:http://google.github.io/styleguide/shell.xml Shell Style Guide Revision 1.26 Paul Armstrong Too m ...

  7. Google JavaScript Style Guide

    转自:http://google.github.io/styleguide/javascriptguide.xml Google JavaScript Style Guide Revision 2.9 ...

  8. Google coding Style Guide : Google 编码风格/代码风格 手册/指南

    1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...

  9. [Guide]Google Python Style Guide

    扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...

随机推荐

  1. mysql的基本使用方法

    创建数据库:create database [if not exist]name [character set 编码方式 collate 校对规则] 显示库的创建信息:show create data ...

  2. ThinkPHP中的__initialize()和类的构造函数__construct()

    ThinkPHP中的__initialize()和类的构造函数__construct()网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不对 ...

  3. unity 3d 生成apk文件时,设置图标

    如图所示:注意红线标注部分: 如果安装到手机之后,程序的图标还是unity的默认图标,重启手机即可.

  4. oracle常用查询三

    查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL>select * from dictionary where instr(comments,'index')>0; 如果我们 ...

  5. Unique Binary Search Trees In JAVA

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  6. achartengine andorid图像引擎入门

    最近在帮机械学院开发一个app 用了第三方的图像引擎——achartengine功能还算强大(虽然相比于Html那些第三方图像引擎还是差点不过也够用了) 入门: 参考http://blog.csdn. ...

  7. Android 判断文件的类型

    import java.util.HashMap; import java.util.Iterator; /** * 判断文件的类型 */ public class MediaFileUtil { p ...

  8. TableLayout属性

    整理于http://naotu.baidu.com/file/e5880b84b1a906838116f7a45f58de78

  9. Kill命令模拟1

    #include<sys/types.h> #include<signal.h> #include<stdio.h> #include<stdlib.h> ...

  10. weblogic配置domain和删除domain

    weblogic创建域的过程比较简单,但是在创建域之前一定要注意不能存在重名的domain. Domain简单定义为:是一个逻辑管理单元,Domain下面包含着weblogic应用服务器中的所有东西, ...