c++ - 头文件中的类声明和定义是否会在每个包含文件中进行编译?

标签 c++ compilation header-files

如果我分离类声明和定义,而是将类定义放入头文件中,那么该定义代码是否会针对包含该头文件的每个源文件重新编译?

最佳答案

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

您通常放入 header 中的多重包含防护只是为了避免在同一翻译单元中进行多次编译。除非 header 的编译结果已被编译器的预编译 header 机制存储在某处,否则 header 将需要在下一个翻译单元中再次编译。

这是 C++ 代码的编译速度往往比 C 代码慢得多的原因之一,也是正确使用前向声明并避免不需要的 #include 语句的重要原因之一。我见过仅通过使用前向声明而不是包含整个 header 来将构建时间缩短一半的情况。

关于c++ - 头文件中的类声明和定义是否会在每个包含文件中进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661426/

相关文章:

c++ - GCC/LD找不到链接库

c++ - -1 #IND 问题

c - "make"编译写在 "cc ex1.c -o ex1"文件中的代码,为什么我们使用 "exe1.c"命令

linux - 通过工具链使用 automake 和 configure

c - 用结构体写入结构体

c# - 需要帮助来查找我正在尝试做的具体事情的名称

c++ - 如何编写适用于 32 位和 64 位的 std::bitset 模板

macos - 找不到架构 x86_64 编译错误的 LLVM OS X 符号

编译器在 C 程序中抛出错误 "undefined symbol"

c++ - .c 文件是否应该包含 .h 文件已经包含的内容?