3

我想我知道inline关键字的作用(似乎我不知道),但是对于今天的编译器(在我的例子中是 Visual Studio 2012 的 C++ 编译器),它是被编译器尊重还是编译器忽略它并内联它的方法认为有好处吗?

4

2 回答 2

16

关键字在某种程度上与内联inline无关。它实际上意味着:这个函数的多个定义可以出现在同一个程序的不同翻译单元中,而不会违反一个定义规则。

仅用于此目的,也就是说,如果您在标题中定义了一个函数,则将其标记为inline(以便可以将包含该标题并因此生成该函数的多个翻译单元链接在一起)。

于 2013-05-03T18:05:13.893 回答
2

您提到您使用的是 Visual Studio 2012,因此您可以使用一些特定于 Microsoft 的说明符来强制执行所需的内联行为。

通常,编译器使用自己的判断来确定何时应该内联函数。但是,如果您知道(因为您有一些应用程序的上下文或知识,编译器无法通过静态分析源代码获得)某些内容应该被内联并且想要覆盖编译器的判断,您可以使用__forceinline关键字。

应该注意的是,即使在使用 时,也不能保证特定函数会被内联,__forceinline因此将其视为对编译器的强烈建议是不安全的。

在大多数情况下,最好将决定留给编译器,如果您想根据运行时行为进一步优化,请使用配置文件引导优化 (PGO) 之类的东西,它将选择如何优化(包括哪些函数要inline) 基于在运行时实际最常被命中的代码路径。

于 2013-05-03T18:15:41.523 回答