我有一个包含许多实用函数的大类。这些函数非常小,我希望将它们内联。
问题在于它们都在一个源文件中,并且应该保留在源文件中而不是移动到头文件中(这样每次更改时我就不需要重新编译所有内容)。
如果我将它们标记为inline,我会得到“symbols not found”的错误。
是否有一种方法可以使它们内联,或者我需要盲目地信任链接时间优化器?
我需要代码在clang 3和gcc 4.6之间可移植,但是基于编译器的#define
也可以(因此只回答如何在其中一个编译器中完成即可)。
我有一个包含许多实用函数的大类。这些函数非常小,我希望将它们内联。
问题在于它们都在一个源文件中,并且应该保留在源文件中而不是移动到头文件中(这样每次更改时我就不需要重新编译所有内容)。
如果我将它们标记为inline,我会得到“symbols not found”的错误。
是否有一种方法可以使它们内联,或者我需要盲目地信任链接时间优化器?
我需要代码在clang 3和gcc 4.6之间可移植,但是基于编译器的#define
也可以(因此只回答如何在其中一个编译器中完成即可)。
.inl
文件中。只有必要的 .cpp
文件需要 #include
它。这样,对实现的更改(触及 .inl 文件)仅会触发依赖的 .cpp 文件重新编译。对定义的更改(触摸 .h 文件)会触发所有使用声明的文件重新编译。.inl
文件,但在我看来,这将会增加更多的维护负担而不值得。 - zwolinline
关键字在类定义外部定义的函数完全相同。而你对优化问题的回答却涉及语法,这表明你没有理解问题。(你的回答表明你理解了问题,但从你所说的话中并不清楚。) - zwolinline
视为强制性的,而不是提示?有些编译器没有任何启发式方法来告诉它们何时不内联程序员认为应该内联的内容。 - zwol一种选择是将内联函数放置在预编译头文件中,这将加快编译速度。但由于内联函数的特性,所有使用它们的地方都必须重新编译。