内联函数

内联函数

\(将函数定义为宏函数或内联函数都可以节约函数压栈出栈的时间\)

\(宏函数的问题:\)

#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
  • \(不能存在任何形式的循坏语句.\)
  • \(函数体不能过于庞大.\)
  • \(不能对函数进行取址操作\)
  • \(编译器对于内联函数的限制不是绝对的,内联函相对于普通函数的优势\\只是节约了函数调用时压栈,跳转,返回的开销.因此,当函数体的执行开销\\远大于压栈,跳转和返回的开销时,内联函数无意义.\)
posted @ 2021-03-13 15:48  phr2000  阅读(240)  评论(0编辑  收藏  举报