Google C++编程规范 – 第十九条 -《前置声明》
转自:http://roclinux.cn/?p=3285
本原创文章属于《Linux大棚》博客。
博客地址为http://roclinux.cn。
文章作者为roc wu
==
【规范】
对于普通的类,建议使用前置声明,而不是#include。
【什么是前置声明】
在英文中,前置声明称为“forward declaration”,是指“对类、函数或模板进行声明,且不含相关的具体定义”。我们可以使用前置声明来代替那些用于声明的#include语句。
【支持者的声音】
过多的#include会导致编译器打开很多的文件,并处理很多的输入内容。另外,当头文件内容修改时,也会导致更多次的重新编译。
如果我们使用前置声明,可以避免上述问题。
【反对者的声音】
- 在使用模板、typedef、默认参数等语法时,我们就比较难确定前置声明的正确形式了 ;
- 对于一段代码片段,我们很难决定是使用前置声明还是使用#include,尤其是在有隐式转换操作时。在一些极端情况下,用前置声明代替#include会完全改变代码的原意。
- 如果要前置声明过多的内容,会显得很冗余拖沓,不如#include简单。
- 对函数和模板的前置声明,会阻碍原作者对函数或模板的改进,比如调整一个参数的类型,给模板的参数增加一个默认值等。
- 对名字空间std::中标记的前置声明,经常会产生“未定义”的报错。
- 如果特意调整代码以便使用前置声明,往往会使得代码运行变慢,代码逻辑变复杂,比如用指针成员代替对象成员等。
- 前置声明对代码效率的收益,目前也没有得到有力的证明。
【结论】
- 如果要使用头文件中的某个函数,请使用#include方法引用头文件
- 如果要使用头文件中的某个类模板,请使用#include方法引用头文件
- 如果要使用某个普通的类,建议使用前置声明。
- 不必只是为了避免使用#include,而用指针成员替代对象成员。
谢谢!
Google C++编程规范 – 第十九条 -《前置声明》的更多相关文章
- 一张图总结Google C++编程规范(Google C++ Style Guide)
Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...
- Google Python编程规范
http://pan.baidu.com/s/1dD1Ra7J 其他语言的编程风格: http://zh-google-styleguide.readthedocs.org/en/latest/
- Google C++ 编程规范总结
一.头文件 #define 的保护 项目 foo 中的头文件 foo/src/bar/baz.h 按如下方式保护: #ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ ...
- FangDD Java编程规范
我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...
- C++的一些编程规范(基于google)
1.所有头文件都应该使用#define 防止头文件被多重包含,命名格式可以参考<PROJECT>_<PATH>_<FILE>_H 2.使用前置声明尽量减少.h文件中 ...
- Java学习笔记(五)——google java编程风格指南(中)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- Google C++编程风格指南 - 中文版
Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...
- 《C+编程规范 101条规则、准则与最佳实践》笔记
<C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...
随机推荐
- Uva 1103 古代象形符号(dfs求连通块, floodfill, 进制转换)
题意: 给定一个H行W列的字符矩阵(H<200, W < 50), 输入的是一个十六进制字符, 代表一行四个相邻的二进制, 1代表像素, 0代表没有像素. 然后要求判断输入的是以下哪些图形 ...
- 使用JS对form的内容验证失败后阻止提交
1.form的两个事件 submit,提交表单,如果直接调用该函数,则直接提交表单 onSubmit,提交按钮点击时先触发,然后触发submit事件.如果不加控制的话,默认返回true,因此表单总能提 ...
- 看板娘 & 二次元 & live2d
live2d https://l2dwidget.js.org/dev.html https://github.com/xiazeyu/live2d-widget.js 看板娘 要切换看板娘吗? ht ...
- 国内程序员的十大疑问之一:为什么老外不愿意用MyBatis?
老外用MyBatis吗 昨天我在我在知乎看到了一张比较Hibernate和MyBatis使用情况的图,顺手发了条朋友圈: Hibernate vs MyBatis ,谁能告诉我什么样的国情导致了这么大 ...
- 使用XML定义组件样式
<TextView android:layout_width="match_parent" android:layout_height="wrap_content& ...
- JSP发送电子邮件
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/sending-email.html: 发送一个简单的电子邮件 给出一个简单的例子,从机器上发送一个简单的 ...
- CSS+Jquery实现QQ分组列表
实现效果图如下: 说明: 1.css隐藏分组下的好友内容: 2.Jquery实现点击分组项事件,实现好友内容的显示和隐藏: 3.样式1,可展开多个分组:样式2,只能有一个分组展开: 源码: <! ...
- [php learn] php 从头開始学习1
前言:大概在2006年的时候,学习过一段时间的php.而且当时做了一个下载的站点,后来因为读研究生阶段用的是java.j2ee相关,所以php就搁浅掉了,php这些年也发生了非常大的变化,最大一个变化 ...
- 云计算VDI相关职位招聘
中电科华云信息技术有限公司是中国优秀的云计算方案提供商和服务商之中的一个.公司依托中国电子科技集团公司,实施"自主.可信.定制.服务"的差异化发展战略,以实现自主创新的技术研发.自 ...
- leetcode02-Add Two Numbers之beats98.68%Java版本号
我的leetcode之旅,该篇章主要完毕使用Java实现算法. 这是第二篇Add Two Numbers 所有代码下载: Github链接:github链接,点击惊喜; 写文章不易.欢迎大家採我的文章 ...