Google C++ style guide——头文件
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——头文件的更多相关文章
- Google C++ Style Guide在C++11普及后的变化
转 http://www.cnblogs.com/chen3feng/p/5972967.html?from=timeline&isappinstalled=0&lwfrom=user ...
- Google C++ Style Guide的哲学
Google C++ Style Guide并不是一个百科全书,也不是一个C++使用指南,但它描述适用于Google及其开源项目的编码指南,并不追求全面和绝对正确,也有许多人置疑它的一些规则.但作为一 ...
- [Guide]Google C++ Style Guide
0.0 扉页 项目主页 Google Style Guide Google 开源项目风格指南 -中文版 0.1 译者前言 Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. ...
- 一张图总结Google C++编程规范(Google C++ Style Guide)
Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...
- electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- Google Shell Style Guide
转自:http://google.github.io/styleguide/shell.xml Shell Style Guide Revision 1.26 Paul Armstrong Too m ...
- Google JavaScript Style Guide
转自:http://google.github.io/styleguide/javascriptguide.xml Google JavaScript Style Guide Revision 2.9 ...
- Google coding Style Guide : Google 编码风格/代码风格 手册/指南
1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...
- [Guide]Google Python Style Guide
扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...
随机推荐
- poj 2115 C Looooops(推公式+扩展欧几里得模板)
Description A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...
- 跟我一起学extjs5(18--模块的新增、改动、删除操作)
跟我一起学extjs5(18--模块的新增.改动.删除操作) 上节在Grid展示时做了一个金额单位能够手工选择的功能,假设你要增加其它功能.也仅仅要依照这个模式来操作即可了,比方说你想 ...
- Android开发最佳学习路线图
为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作下面学习路线图:希望能帮助到广大的android爱好者. 在開始之前我们 ...
- 设计模式入门之职责链模式Chain Of Responsibility
//职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. //实例:申请费用的功能,不同金额的费 ...
- Unity 进度条3D制作(3D版)
昨天我们一起学习了2D进度跳的制作,那么趁着我们脑海中还残存昨日的记忆,今天继续学习另一种方法: 实现思路:当鼠标悬浮Start按钮->实例化物体并显示进度->100/100->进入 ...
- live555从RTSP服务器读取数据到使用接收到的数据流程分析
本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...
- CSS学习笔记——CSS中定位的浮动float
昨天在解决了盒模型的问题之后又出现了新的知识模糊点:浮动和绝对定位?今天先解决浮动相关的问题,首先列举出想要解决的问题: 1.浮动到底是怎么样的? 2.浮动对元素的影响有什么? 3.浮动主要用来干什么 ...
- Java学习——继承
将学生工人的共性描述提取出来,单独进行描述,只要让学生和工人与单独描述的这个类有关系,就可以了. 继承:1,提高了代码的复用性.2,让类与类之间产生了关系.有了这个关系,才有了多态的特性. 注意:千万 ...
- 用自动化运维工具解放IT运维
何谓自动化运维,即在最少的人工干预下,结合运用脚本与第三方工具,保证业务系统7*24小时高效稳定运行.这应该是所有业务系统运维终极目标. 我们对运维的要求通常是: 1.事前预警 在故障出现之前,管理人 ...
- Entity Framework 6 Code First创建
基本上我是DB先设计好的,所以就按现存在的table去写程式. 1.Web.config里配置Db连接字串,Connection String Name为DefaultConnection <c ...