头文件中的类声明和定义是否在每个include上编译?

时间:2012-12-01 16:43:43

标签: c++ compilation header-files

如果我分隔类声明和定义,但是将我的类定义放在头文件中,那么这个定义代码是否会为包含该标题的每个源文件重新编译? / p>

1 个答案:

答案 0 :(得分:3)

它为每个translation unit编译一次(然后从中构建一个目标文件。)除非您在编译器中使用某种形式的预编译头功能。

您通常放在标题中的多个包含保护是为了避免仅在同一个翻译单元中进行多次编译。除非编译器的编译结果已由编译器的预编译头机制存储在某处,否则需要在下一个转换单元中再次编译头。

这是C ++代码编译速度比C代码慢得多的原因之一,以及为什么正确使用前向声明并避免不需要的#include语句很重要。我已经看到过只使用前向声明而不是包含整个标题,将构建时间减少一半的情况。