c++内联函数

什么是内联函数

内联函数是c++的一个增强的特性,用来降低程序运行时间。所谓的内联就是:编译器将使用函数定义体代替函数调用语句,需要注意的是这种代替发生在编译阶段而非程序运行阶段。

注意:内联函数只是给编译器一个内联的建议,编译器需要根据实际的函数是否符合内联的有利条件来决定是否采用内联建议。如果函数体过大,则编译器将忽略函数的内联声明

内联函数的使用

需要使用内联函数的时候,只需要在函数定义的前面加上“inline”关键字。如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//普通函数声明
inline int add(int a, int b)
{
return a + b;
}

//类函数中的使用
class Test
{
public:
int add(int a, int b);
}
inline int Test::add(int a,int b)
{
return a + b;
}

为什么要使用内联函数

我们知道调用一个函数需要做事情包括:保存当前函数执行的现场,将函数局部变量以及函数的返回地址压入堆栈中,然后再将即将调用的新函数加载到内存中,这要经历复制参数值、跳转到所调用函数的内存位置、执行函数代码、存储函数返回值等过程,当函数执行完后,再获取之前正在调用的函数的地址,回去继续执行那个函数,运行时间开销简直太多了。

所以有时候我们会写一些功能专一的函数,这些函数的函数体不大,包含了很少的执行语句,这个时候就可以使用内联函数。

使用内联函数需要注意的问题

  1. 所有类中定义的函数都默认声明为inline函数,所有我们不用显示地去声明inline。
  2. 虚函数不允许内联
  3. 在内联函数中,不允许使用循环语句和switch语句。
  4. 带有异常接口的函数不能声明为内联函数
  5. 递归函数不能声明为内联函数