4.inline 内联函数
内联函数:
函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调用函数中,被调用函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地方,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。引入内联函数正是为了解决这个问题,提高程序的运行效率。
在c++中的内联函数可以代替C语言的宏替换,在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换,但内联函数比宏替换要安全,直观,因为函数调用要进行参数类型检查,而宏替换不做检查。
由于在编译时将函数体重的代码替换到程序中,因此会增加目标的代码量,即增加空间开销,而在时间开销上不像函数调用时那么大,可见它是以目标代码的增加为代价来替换时间的节省。
/*进行了测试,不过嗯。。。这个结果不知道怎么说才好,并没看出使用内联函数后,时间上的优势*/
#include <iostream>
using namespace std;
inline int max(int a,int b);
int main()
{
cout << max(3,6) << endl; //调用max()时,相当于把代码return ...放到了对应部分
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
cout << max(3,6) << endl;
return 0;
}
inline int max(int a,int b)
{
return a > b ? a : b;
}
在c++中,内联函数使用关键字inline,放在函数类型之前。
使用内联函数时应注意以下问题:
- 内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数;
- 内联函数体重,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。