内联函数
内联函数
\(将函数定义为宏函数或内联函数都可以节约函数压栈出栈的时间\)
\(宏函数的问题:\)
#define MAX(a, b) ((a) > (b)) ? (a) : (b)
\(宏函数是无脑展开, 在预处理阶段进行,它不具有语法的检测能力. 如:\)
MAX(a++, b++) -> ((a++) > (b++)) ? (a++) : (b++)
\(显然,这个结果不是我们想要的.\)
\(但是如果定义成内联函数:\)
inline int MAX(int a, int b) {
return a > b ? a : b
}
\(内联函数也会展开,但是发生在编译阶段,避免了宏函数的问题.\)
特点
- \(C++编译器直接将函数体插入在函数调用的地方.\)
- \(内联函数没有普通函数调用时的额外开销(压栈,跳转,返回).\)
- \(内联函数具有函数的特征(返回类型,参数检测).\)
- \(内联函数有编译器处理,直接将编译后的函数体插入调用的地方\\宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程.\)
限制a
- \(不能存在任何形式的循坏语句.\)
- \(函数体不能过于庞大.\)
- \(不能对函数进行取址操作\)
- \(编译器对于内联函数的限制不是绝对的,内联函相对于普通函数的优势\\只是节约了函数调用时压栈,跳转,返回的开销.因此,当函数体的执行开销\\远大于压栈,跳转和返回的开销时,内联函数无意义.\)