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

时间:2015-01-10 16:46:01

标签: c++ inline

假设我们提供了以下头文件:

那么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
  3. 的情况下

1 个答案:

答案 0 :(得分:1)

当您在发布配置中构建应用程序时,大多数现代编译器实际上为您编写了函数 - OtherFunction被声明为内联/正常的效果将与编译器决定哪个是更好的选项相同。我当然知道这与MSVC10及以上编译器(Visual Studio)有关。事实上,无论你想要什么内联,编译器最终都会控制内联的内容。

一个例子是,如果你的函数调用被链接起来,推送和弹出操作在inline你的函数不会被内联之后才会有意义(即使你声明了它们)成为inline d)

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

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

Benefits of inline functions in C++?

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

已经得到了很好的解释。