假设我们提供了以下头文件:
那么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
)答案 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?
已经得到了很好的解释。