首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将内联函数的声明和定义分开?

是否可以将内联函数的声明和定义分开?
EN

Stack Overflow用户
提问于 2012-07-11 08:01:35
回答 7查看 5.5K关注 0票数 9

我需要定义内联函数来提高代码的性能。目前,函数声明在.h文件中,定义在.cpp文件中。我在每个函数声明的前面添加了内联关键字,但是我得到了链接错误。是否可以将内联函数的声明和定义分开?

EN

回答 7

Stack Overflow用户

发布于 2012-07-11 08:05:10

您可以很好地分离声明和定义,但是该定义必须在使用该函数的每个翻译单元中可用,例如:

代码语言:javascript
复制
#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条基本上说它必须在任何地方都是相同的,甚至超负荷决议等等。

票数 9
EN

Stack Overflow用户

发布于 2012-07-11 08:05:07

是的,但是您必须将实现放在头文件中。这是因为为了内联,定义必须是已知的,当包括标题时。

如果这样做,即使不使用inline关键字,现代编译器也会自动内联该函数。

票数 3
EN

Stack Overflow用户

发布于 2012-07-11 08:15:49

你确定让你的功能“内联”会提高你的性能吗?我很肯定它不会。

编译器能够内联一些函数调用当且仅当它可以看到内联函数的主体。因此,您也需要包含函数的主体,但是如果这样做,则不需要用“内联”注释函数,因为编译器只需要函数的主体--而不是“内联”关键字。现在的编译器是聪明的,不需要提示是否和何时内联函数。内联并不一定会提高程序的性能,而且可能会增加可执行文件的大小。

这篇文章作者Herb。他认为关键字“内联”在C++中没有任何意义。但我不同意他的观点。关键字“内联”有一个不同之处:您可以在程序中多次指定内联函数的主体(前提是每次定义完全相同) --这在将函数体放入标头(如果出于任何原因需要时)时非常有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11428147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档