内联函数
常规函数调用,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈中,跳到标记函数起点的内存单元。执行函数代码,然后条回到地址被保存的指令出。来回跳跃并记录跳跃位置以唯着使用函数时,需要一定开销。
C++内联函数
编译器会用函数代码替换函数调用,避免了函数调用时程序跳跃的开销。如果函数的运行开销较大,内联函数没有什么意义,反而会占用更多的内存。
内联函数只需在函数原型和函数声明时使用关键字inline即可。但编译器并不一定满足要求,有些编译器没有实现这种特性,编译器可能认为该函数过大或者注意到函数调用了自己,因此不将其作为内联函数。
内联函数不能递归,因为内联函数是用函数代码替代函数调用,如果可以递归将会无限的把递归调用替换为函数代码。
内联函数与宏
宏define是通过文本替换实现的,而内联函数还是函数通过传递参数实现
#define SQUARE(x) x*x
inline int square(int x) { return x*x; }
SQUARE(1+2); // 1+2*1+2
square(1+2); // (1+2) * (1+2)

浙公网安备 33010602011771号