首页 / C++ / [转] 关于c++的头文件依赖
[转] 关于c++的头文件依赖
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[转] 关于c++的头文件依赖,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1330字,纯文字阅读大概需要2分钟。
内容图文
![[转] 关于c++的头文件依赖](/upload/InfoBanner/zyjiaocheng/1227/549621056f2146fb8e525d586a5d7be9.jpg)
http://www.cnblogs.com/yvesliao/p/3938730.html
PS: 使用单向依赖
正在看google c++编程规范,里面对头文件依赖是这么说的:
1
2
3
4
5
6
7
8
9
10
11
|
使用前置声明(forward declarations)尽量减少.h文件中#include的数量。
当 一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,代码就要重新编译。如果你的头文件包含了其他头文件,这些头 文件的任何改变也将导致那些包含了你的头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件中的。
使用前置声明可以显著减少需要包含的头文件数量。举例说明:头文件中用到类File,但不需要访问File的声明,则头文件中只需前置声明
class
File;无需#include
"file/base/file.h"
。
在头文件如何做到使用类Foo而无需访问类的定义?
1) 将数据成员类型声明为Foo *或Foo &;
2) 参数、返回值类型为Foo的函数只是声明(但不定义实现);
3) 静态数据成员的类型可以被声明为Foo,因为静态数据成员的定义在类定义之外。
另一方面,如果你的类是Foo的子类,或者含有类型为Foo的非静态数据成员,则必须为之包含头文件。
有时,使用指针成员(pointer members,如果是scoped_ptr更好)替代对象成员(
object
members)的确更有意义。然而,这样的做法会降低代码可读性及执行效率。如果仅仅为了少包含头文件,还是不要这样替代的好。
当然,.cc文件无论如何都需要所使用类的定义部分,自然也就会包含若干头文件。
译者注:能依赖声明的就不要依赖定义。
|
于是在VC下做了下测试,先自行建立Foo.h,Foo.cpp文件,里面定义一个类CFoo,不用管怎么定义,随便都行,然后建议main.cpp,在里面测试:
1
2
3
4
5
6
7
8
9
10
|
class
CFoo;
class
test
{
public
:
/*1*/
CFoo func(CFoo foo);
//ok
/*2*/
static
CFoo sub;
//ok
/*3*/
CFoo& foo1;
//ok
/*4*/
CFoo* pfoo1;
//ok
/*5*/
CFoo foo;
//error
};
|
之前都是直接include Foo.h 文件,这次不引用,而是声明一下CFoo类。下面看test类的声明。
1、正确。说明了规范中第2点,函数参数和返回值只是声明。
2、正确。说明了规范中第3点,静态数据成员的类型可以被声明为Foo,因为静态数据成员的定义在类定义之外。
3、4、正确。5错误。说明了规范中第1点,非静态的数据成员必须是指针或引用,否则需要依赖定义,其实也好理解,非静态表示每个实例都占有内存,必然需要知道内存的大小,没有定义怎么能知道呢?
原文:http://www.cnblogs.com/qiangxia/p/4293828.html
内容总结
以上是互联网集市为您收集整理的[转] 关于c++的头文件依赖全部内容,希望文章能够帮你解决[转] 关于c++的头文件依赖所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。