内联函数(inline functions)

作者:jicanmeng

时间:2014年11月27日


函数调用时,内部过程需要进行调用初始化、执行函数代码、调用后处理三步。当函数体较小且执行的功能比较简单时,这种函数调用方式的系统开销相对较大。为了解决这一问题,C++引入了内联函数(inline functions)的概念。程序调用内联函数时,将函数体的代码直接插入到调用处。这样可以减少程序的执行时间,但同时增加了代码的实际长度。内联函数在定义时,需要在函数的返回值类型前面加上inline关键字。

根据维基百科,C++,C99和GNU C都支持内联函数,然而1989 ANSI C,这个最被广泛使用的C标准却是不支持内联函数的。

示例程序如下:

#include <iostream>

inline int min(int nX, int nY)
{
    return nX > nY ? nY : nX;
}

int main()
{
    using namespace std;
    cout << min(5, 6) << endl;
    cout << min(3, 2) << endl;
    return 0;
}

经过编译器处理后,代码转换为下面的样子:

#include <iostream>

inline int min(int nX, int nY)
{
    return nX > nY ? nY : nX;
}

int main()
{
    using namespace std;
    cout << (5 > 6 ? 6 : 5) << endl;
    cout << (3 > 2 ? 2 : 3) << endl;
    return 0;
}

使用内联函数有一些限制:

  1. 内联函数中不能有数组定义,也不能有任何静态类型的定义。
  2. 内联函数中不能含有循环、switch和复杂嵌套的if语句。
  3. 内联函数不能是递归函数。

内联函数一般是比较小的、经常被调用的、大多数可在一行写完的函数,并常用来代替带参数的宏定义。

参考资料

  1. <<C++实用教程>> 电子工业出版社 郑阿奇 主编 丁有和 编著 P98
  2. The C++ Tutorial:
    http://www.learncpp.com/cpp-tutorial/75-inline-functions/