内置函数,又称内嵌函数 或 内联函数。
调用函数时需要一定的时间和空间开销,如图表示函数调用过程:
1:程序先执行a函数调用之前的语句
2:流程的控制转移到被调用函数入口
3:执行被调用函数的中的语句
4:流程返回调用函数的下一条语句,将函数返回值带回
5:接着执行主函数中未执行的语句
这样要求在转去调用函数之前,要先记下当时执行的指令地址,还要记下当时有关信息,以便在函数调用之后继续执行。
在函数调用后,流程返回到先前记下地址处,并且根据记下的信息“恢复现场”,然后继续执行,这些都要花费一定时间。如果有
函数需要频繁使用,则所使用时间会很长,从而降低执行效率。
使用内置函数可压缩时间开销,只需在函数首行左端加一个关键字inline即可。
#include<iostream>
#include<stdlib.h>
using namespace std;
inline int max(int,int,int);
int main()
{
int m = 0,i = 10, j = 20, k = 30;
m = max(i, j, k);
cout << "max = " << m << endl;
system("pause");
return 0;
}
inline int max(int a, int b, int c)
{
if (a < b) a = b;
if (a < c)a = c;
return a;
}
程序分析:
由于指定其为内置函数,因此编译系统遇到函数调用“max(i,j,k)”时,会用max的函数体代替“max(i,j,k)”,同时将实参代替形参。
所以 m = max(i,j,k);就被置换成:
if(i < j ) i = j;
if(i < k ) i = k;
m = i;
注意:
1:可以在定义函数和声明函数时同时写inline,也可只在声明时加inline,定义时不加。只要在函数调用前把inline的信息告知编译系统,系统处理时就会按照内置函数处理。:
2: 内置函数可以节省运行时间,但增加了目标程序的长度,所以只有规模很小的情况下,函数调用时间开销超过本身执行时间就会声明为内置函数,可大大减少程序运行时间。
3:对函数作inline声明,只是对系统的一个建议,而不是指令,编译系统会根据情况决定是否这样做。
例如:复杂的循环语句,switch语句
总结:
只有规模较小而又被频繁使用的简单函数,才适合声明为inline函数!