如果我不分离类声明和定义,而是将类定义放入头文件中,那么该定义代码是否会针对包含该头文件的每个源文件重新编译?
最佳答案
每 translation unit 都会编译一次(然后从中构建目标文件。)除非您在编译器中使用某种形式的预编译头功能。
您通常放入 header 中的多重包含防护只是为了避免在同一翻译单元中进行多次编译。除非 header 的编译结果已被编译器的预编译 header 机制存储在某处,否则 header 将需要在下一个翻译单元中再次编译。
这是 C++ 代码的编译速度往往比 C 代码慢得多的原因之一,也是正确使用前向声明并避免不需要的 #include
语句的重要原因之一。我见过仅通过使用前向声明而不是包含整个 header 来将构建时间缩短一半的情况。
关于c++ - 头文件中的类声明和定义是否会在每个包含文件中进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661426/