如何处理内联函数体内的函数调用?

How are function calls within inlined function's body treated?

假设我们喜欢以下头文件:

Header1.h

#include "Header2.h"

class A
{
public:
    void Function();
}

inline void A::Function() 
{ 
    // Code ...
    OtherFunction(); // Function from Header2.h
    // Code ...
}

如果编译器实际上选择内联Function调用OtherFunction会发生什么:

  1. 如果 OtherFunction 定义可用于当前翻译单元,是否也可以 可能 内联到 Function 的正文中? (基本上嵌套内联可用吗?)
  2. 如果 OtherFunction 定义对于当前翻译单元不可用,它是否会保持简单的函数调用,同时内联它周围的代码? (在编译器选择内联的情况下 Function

当您在发布配置中构建应用程序时,大多数现代编译器实际上会为您内联函数 - OtherFunction 被声明为 inlined/normal 的效果与编译器将决定哪个是相同的更好的选择。我当然知道这会发生在 MSVC10 及更高版本的编译器 (Visual Studio) 中。事实上,内联任何你想要的,但编译器最终控制内联的内容。

一个例子是,如果您的函数调用以某种方式链接起来,那么在 inline 之后 push 和 pop 操作将没有意义,您的函数将不会被内联(即使您将它们声明为inlined)

如果它能让事情变得更简单 - 请参阅:

When to use inline function and when not to use it?

Benefits of inline functions in C++?

更重要的是,How deep do compilers inline functions?

已经有很好的解释了