“内联”功能的实用性

时间:2010-07-09 12:33:44

标签: c++

关于内联有两件事:

  • 如果编译器确定无法内联函数,则忽略inline关键字。
  • 有一个编译器优化(在Visual Studio上,我不知道GCC)告诉编译器尽可能内联所有函数。

由此我得出结论,我从不需要打扰内联。我只需打开发布版本的编译器优化。

或者是否有任何首选手动内联的情况?

8 个答案:

答案 0 :(得分:12)

inline关键字有两个功能:

  • 它作为编译器执行内联优化的提示(这在现代编译器上基本无用,无论是否使用关键字都可以内联使用)
  • 它告诉编译器/链接器忽略一个定义规则:inline'd符号可以在多个转换单元中定义(通常因为它在头中定义,包含在多个文件中) 。通常,这会导致链接器错误,但在使用inline关键字时允许这样做。

答案 1 :(得分:7)

是的,如果要将函数放在头文件中,并将该文件包含在多个翻译单元中。这实际上是C ++中inline的主要目的。

答案 2 :(得分:1)

手动使用inline可能对较旧的编译器或不太复杂的编译器(例如嵌入式开发的编译器)很有用。如果您使用的是visual studio,我认为您通常不需要使用inline关键字。

答案 3 :(得分:1)

如果您希望能够从库中内联函数,那么Inline也很有用。只有将函数的代码放在头文件中(需要内联),编译器才能内联函数。当然,无论是否内联函数,编译器仍然是上升的。

答案 4 :(得分:1)

构建共享库时,inline关键字会产生副作用。内联函数不会导出到符号表中,也不会导出到库的二进制文件中。因此,inline关键字在共享库方面至关重要,因为编译器将无法内联导出的函数。另一方面,库的内联函数将始终内联,因为它不存在于库的二进制形式中。

答案 5 :(得分:0)

您可能不希望在任何可能的地方内联。这可能会增加二进制文件的大小。您可能会选择一些不太常用的函数,内联可以在不增加位大小的情况下更快地运行

答案 6 :(得分:0)

这取决于您的环境以及您想要做什么,因此很难说内联是否可取。

这篇link有一些关于内联的有趣读物。还有一些合理的建议(几乎归结为:避免这样做)

答案 7 :(得分:0)

阅读Herb Sutters关于内联的评论:
http://www.gotw.ca/gotw/033.htm