内联函数
我们都知道函数的调用有利于代码重用,提高效率,但有时频繁的函数调用也会增加时间与空间的开销反而造成效率低下。因为调用函数实际上是将程序执行顺序从函数调用处跳转到函数所存放在内在中的某个地址,将调用现场保留,跳转到那个地址将函数执行,执行完毕后再回到调用现场,所以频繁的函数调用会带来很大开销。
为了解决这个问题,C++提供了内联(inline)函数,在编译时将函数体嵌入到调用处。内联函数其实只是在函数定义前面加上一个inline关键字,其格式如下:
inline 返回值类型 函数名(参数列表)
{
函数体;
}
inline是定义内联函数的关键字,这样定义成了内联函数,当调用内联函数时,编译器就会把该函数体代码插入到调用位置,省去了函数调用的开销。接下来通过一个案例来演示内联函数的调用,具体如例1所示。
1 #include <iostream>
2 using namespace std;
3 inline void func() //内联函数
4 {
5 cout << "这是一个内联函数" << endl;
6 }
7 int main()
8 {
9 func(); //内联函数调用
10 system("pause");
11 return 0;
12 }
运行结果如图1所示。
图1 例1运行结果
在编译时,编译器看到func()函数是一个内联函数,就会将func()函数代码插入到func()函数的调用处,如下所示::
int main()
{
cout << "这是一个内联函数" << endl;
system("pause");
return 0;
}
这样虽然节省了开销,但是又会造成代码膨胀,因此一般都将结构简单语句少的函数定义为内联函数。内联函数中不可以包含复杂的控制语句,注意递归函数是不可以定义成内联函数的。
inline只是建议编译器将函数嵌入到调用处,编译器会根据函数的长度、复杂度等自行决定是否把函数作为内联函数来调用。