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

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

本文关键字:函数体 函数调用 何处理 处理      更新时间:2023-10-16

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

标题1.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被声明为内联/正常的效果将与编译器决定哪个是更好的选择相同。我当然知道MSVC10及更高版本的编译器(Visual Studio)会发生这种情况。事实上,内联你想要的任何内容,但编译器最终控制内联的内容。

例如,如果您的函数调用以推送和弹出操作在inline后没有意义的方式链接,则函数不会内联(即使您将它们声明为 inline d)

如果它使事情变得更容易 - 请参阅:

何时

使用内联函数,何时不使用?

内联函数在C++中的好处?

更重要的是,编译器内联函数的深度有多大?

已经得到了很好的解释。