我正在尝试使用内联函数进行实验。我认为在预处理时间执行函数体的替换。但事实并非如此。如果我们将内联函数声明为以下
//--main.cpp--//
....
inline void bar();
....
然后运行g ++ -E main.cpp然后我们可以看到内联函数而无需更改。那么替换体功能何时执行?
答案 0 :(得分:3)
Funcion inlining 是一个编译时动作。注意,内联不是命令,它是对编译器的请求,编译器可以自由地忽略它。例如,大型方法,递归方法,包含循环的方法或其他方法调用通常不是inline
d。当编译器执行内联时,它将方法调用替换为方法体,稍微类似到宏扩展,但此过程更复杂。与宏不同,编译器不会盲目地替换方法调用,它必须处理方法的参数。
根据标准
A function declaration (8.3.5, 9.3, 11.4) with an inline specifier declares an inline function. The
inline specifier indicates to the implementation that inline substitution of the function body at the
point of call is to be preferred to the usual function call mechanism. An implementation is not required
to perform this inline substitution at the point of call;