预编译的标题:做和不做?

时间:2011-02-07 05:47:57

标签: c++ precompiled-headers

我知道预编译的标题用于加速编译,但是对于我应该包含在哪些文件中有任何做和不做吗?例如,我有一个使用大量boost库的项目,所以我只在stdafx.h中包含了boost头文件(我正在使用VS2008)。我也应该在其中包含每个标准头文件吗?即使我(例如)包含<vector>但从不使用std::vector,这会增加我的可执行程序的大小吗?在stdafx.h中包含我自己的项目头文件是不是一个坏主意?

3 个答案:

答案 0 :(得分:4)

一般来说,您在整个应用程序中使用但不经常更改的每个头文件都应该进入预编译的头文件。这将加快编译速度,因为预编译的头文件只编译一次。

如果添加经常更改的头文件,您将错过预编译头文件的要点,因为这个经常更改的头文件将导致整个项目重新编译,可能不必要。

具体来说,定义一个模板类,所以如果不使用std :: vector,开销就不会很大。但是,我建议不要添加头文件 - 无论是标准文件还是通用文件 - 如果你真的不需要它们。编译时有一些开销,二进制大小,它可能会在项目后期引起冲突,所以为什么要添加一些东西,如果你真的不需要呢?

答案 1 :(得分:2)

预编译的头文件不会影响可执行文件的大小,只影响编译速度。由于它们是预编译的,因此无需一直重新编译。 Windows.h是此功能的主要内容。

答案 2 :(得分:0)

最好包含c ++标准头文件和boost库头以及您经常使用的第三方库中的任何其他头文件。这不会影响可执行文件的大小。

但是,您不应该在自己的项目中包含标题,因为每当您在这些标题中进行更改时,都需要重建整个项目。