C++-c++代码文件包含没有用到的头文件有什么影响吗?

C++-c++代码文件包含没有用到的头文件有什么影响吗?

虐人心 发布于 2017-03-11 字数 134 浏览 1196 回复 4

如果include了头文件,但实际的源码里面没有调用函数或使用变量,
对编译或者开发有不好的地方吗?
比如对编译速度有影响吗。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

想挽留 2017-09-16 4 楼

包含的头文件的内容根据情况有可能影响编译生成的目标文件,如变量的定义,生成一些不起作用的代码。但是在编译器有优化时,其中的无用的变量可以被优化掉,不产生影响。

虐人心 2017-05-17 3 楼

头文件会在预编译的时候,由编译器将头文件的内容包含进来,对编译的速度肯定是有影响的,因为很多情况下,因为头文件太大,人们会使用前置声明来解决,所以从这点看出包含没必要包含的头文件是不好的习惯

甜柠檬 2017-04-10 2 楼

这个问题似乎没有提问的必要:
Google C++ Style Guide 中文版本

关于头文件:
当一个头文件被包含的同时也引入了新的依赖, 一旦该头文件被修改, 代码就会被重新编译. 如果这个头文件又包含了其他头文件, 这些头文件的任何改变都将导致所有包含了该头文件的代码被重新编译. 因此, 我们倾向于减少包含头文件, 尤其是在头文件中包含头文件.

使用前置声明可以显著减少需要包含的头文件数量. 举例说明: 如果头文件中用到类 File, 但不需要访问 File 类的声明, 头文件中只需前置声明 class File; 而无须 #include "file/base/file.h".

不允许访问类的定义的前提下, 我们在一个头文件中能对类 Foo 做哪些操作?

我们可以将数据成员类型声明为 Foo * 或 Foo &.
我们可以将函数参数 / 返回值的类型声明为 Foo (但不能定义实现).
我们可以将静态数据成员的类型声明为 Foo, 因为静态数据成员的定义在类定义之外.
反之, 如果你的类是 Foo 的子类, 或者含有类型为 Foo 的非静态数据成员, 则必须包含 Foo 所在的头文件.

有时, 使用指针成员 (如果是 scoped_ptr 更好) 替代对象成员的确是明智之选. 然而, 这会降低代码可读性及执行效率, 因此如果仅仅为了少包含头文件,还是不要这么做的好.

当然 .cc 文件无论如何都需要所使用类的定义部分, 自然也就会包含若干头文件.

归属感 2017-03-29 1 楼

会影响代码质量和可读性,会影响编译器优化,会影响编译速度,当你修改了一个没有用的头文件时,可能会引起引用它的文件重新编译。