内联不需要在头文件中定义函数?

No need to define functions in header files for inlining?

为了让编译器内联一个函数调用,它需要有完整的定义。如果函数没有在头文件中定义,编译器只有声明,不能内联函数。

因此,我通常会定义我认为编译器可能希望在头文件中内联的短函数。

通过全程序优化(/LTCG and /GL),是否不再需要在头文件中定义函数以允许它们被内联?

是否有其他原因在头文件中定义函数,除了在某些情况下使用模板?

一个原因是因为您想分发 single-header 库,例如 STB。 此外,链接速度非常慢,即使使用 gold 和 LLD 等新链接器也是如此。因此,您可能希望避免链接,而是将所有内容都包含在一个文件中。

这可以超越链接而只是函数定义。思路是一般所有东西只包含一次,减少compile-time,因为C++编译模型is quite bad and slow,部分原因是东西是re-compiled。这就是unity build的思路。

如果您认为统一构建听起来超级愚蠢,请考虑 Ubisoft(至少曾经如此)use it