如何处理内联函数体内的函数调用?
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
会发生什么:
- 如果
OtherFunction
定义可用于当前翻译单元,是否也可以 可能 内联到 Function
的正文中? (基本上嵌套内联可用吗?)
- 如果
OtherFunction
定义对于当前翻译单元不可用,它是否会保持简单的函数调用,同时内联它周围的代码? (在编译器选择内联的情况下 Function
)
当您在发布配置中构建应用程序时,大多数现代编译器实际上会为您内联函数 - OtherFunction
被声明为 inlined/normal 的效果与编译器将决定哪个是相同的更好的选择。我当然知道这会发生在 MSVC10 及更高版本的编译器 (Visual Studio) 中。事实上,内联任何你想要的,但编译器最终控制内联的内容。
一个例子是,如果您的函数调用以某种方式链接起来,那么在 inline
之后 push 和 pop 操作将没有意义,您的函数将不会被内联(即使您将它们声明为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?
已经有很好的解释了
假设我们喜欢以下头文件:
Header1.h
#include "Header2.h"
class A
{
public:
void Function();
}
inline void A::Function()
{
// Code ...
OtherFunction(); // Function from Header2.h
// Code ...
}
如果编译器实际上选择内联Function
调用OtherFunction
会发生什么:
- 如果
OtherFunction
定义可用于当前翻译单元,是否也可以 可能 内联到Function
的正文中? (基本上嵌套内联可用吗?) - 如果
OtherFunction
定义对于当前翻译单元不可用,它是否会保持简单的函数调用,同时内联它周围的代码? (在编译器选择内联的情况下Function
)
当您在发布配置中构建应用程序时,大多数现代编译器实际上会为您内联函数 - OtherFunction
被声明为 inlined/normal 的效果与编译器将决定哪个是相同的更好的选择。我当然知道这会发生在 MSVC10 及更高版本的编译器 (Visual Studio) 中。事实上,内联任何你想要的,但编译器最终控制内联的内容。
一个例子是,如果您的函数调用以某种方式链接起来,那么在 inline
之后 push 和 pop 操作将没有意义,您的函数将不会被内联(即使您将它们声明为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?
已经有很好的解释了