我需要定义内联函数来提高代码的性能。目前,函数声明在.h文件中,定义在.cpp文件中。我在每个函数声明的前面添加了内联关键字,但是我得到了链接错误。是否可以将内联函数的声明和定义分开?
发布于 2012-07-11 08:05:10
您可以很好地分离声明和定义,但是该定义必须在使用该函数的每个翻译单元中可用,例如:
#include <iostream>
inline void foo();
int main() {
foo();
}
inline void foo() {
std::cout << "Hi\n";
}是完全合法和正确的。
引用n3290第7.1.2.4节的确切引文如下:
内联功能应在使用odr的每个翻译单元中定义,并在每种情况下具有完全相同的定义(3.2)。注意:在定义出现在翻译单元之前,可能会遇到对内联函数的调用。-end注记
其中第3.2条基本上说它必须在任何地方都是相同的,甚至超负荷决议等等。
发布于 2012-07-11 08:05:07
是的,但是您必须将实现放在头文件中。这是因为为了内联,定义必须是已知的,当包括标题时。
如果这样做,即使不使用inline关键字,现代编译器也会自动内联该函数。
发布于 2012-07-11 08:15:49
你确定让你的功能“内联”会提高你的性能吗?我很肯定它不会。
编译器能够内联一些函数调用当且仅当它可以看到内联函数的主体。因此,您也需要包含函数的主体,但是如果这样做,则不需要用“内联”注释函数,因为编译器只需要函数的主体--而不是“内联”关键字。现在的编译器是聪明的,不需要提示是否和何时内联函数。内联并不一定会提高程序的性能,而且可能会增加可执行文件的大小。
见这篇文章作者Herb。他认为关键字“内联”在C++中没有任何意义。但我不同意他的观点。关键字“内联”有一个不同之处:您可以在程序中多次指定内联函数的主体(前提是每次定义完全相同) --这在将函数体放入标头(如果出于任何原因需要时)时非常有用。
https://stackoverflow.com/questions/11428147
复制相似问题