内联函数中的内联函数

时间:2015-09-30 20:44:42

标签: c++ inline

用于以下功能:

inline void A() {
   ...
   B();
   ...
}

B 也由编译器内联?

如果没有,我应该将 B 内联以提高性能吗?

4 个答案:

答案 0 :(得分:6)

在大多数情况下,您可以轻松地休息,将内联决策留给编译器,这将比您更好地了解它何时何时会导致更好的性能。

在这种特殊情况下,我会强烈怀疑这完全取决于编译器做什么。

答案 1 :(得分:4)

不,内联关键字只会导致A代码在调用者代码中内联。这不会影响B的内联。

除此之外,在c ++中,inline关键字只是对编译器的一个提示,允许忽略它。现代编译器决定何时需要内联函数,即使未使用关键字。

答案 2 :(得分:4)

不知何故,所有评论者都没有提到有些情况,内联不仅仅是对编译器的暗示,而是一个强制关键字。当一个函数的非模板定义放在多个.cpp文件包含的头文件中时,就会发生这种情况。在这种情况下,缺少内联将触发链接器错误。事实上,这是唯一一个人甚至打扰输入这6个字符的情况。在其他情况下,编译器将内联所有内容 - 无论此关键字存在。

答案 3 :(得分:2)

当你声明一个函数/方法inline时,编译器只是一个提示,应该内联这个特定的函数。然后编译器可能会也可能不会内联它。这同样适用于嵌套调用,例如在B()内调用A()

我可能会在这两个函数中添加inline说明符,但这只是一种风格问题 - 像GCC这样的现代优化编译器无论如何都会优化它。