为什么要有内联函数?

由于有些函数执行的内容简单,如果像普通函数一样压栈出栈会浪费时间,如果使用宏函数又会造成一些错误和不便,所以C++便有了内联函数

简单的说一下宏函数的缺点:

#include<iostream>
using namespace std;
#define getMax(a,b) a>b?a:b

int main()
{
	int a = 10, b = 1;
	int ret = getMax(++a, ++b);
	cout << \"ret:\" << ret << endl;//我们想要的结果是11,但是由于宏定义只是简单的文本替换,导致结果不正确
		//宏定义没有作用域的概念
	return 0;
}

内联函数:

#include<iostream>
using namespace std;

inline int  getMax(int a, int b)  //使用inline修饰函数,则为内联函数
{
	return a > b ? a : b;
}

int main()
{
	int a = 10, b = 1;
	int ret = getMax(++a, ++b);
	cout << \"ret:\" << ret << endl;
	return 0;
}

内联函数就是时间换空间,没有普通函数的压栈跳转出栈等操作,在适当的地方像预定义宏一样展开,所以没有调用函数的开销。

内联函数注意点:

  • 当我们将内联函数的声明和定义分开需要都加上inline关键字
  • 类里面的成员函数编译器会默认加上inline关键字

使用内敛函数的规则:

  • 不能存在任何形式的循环语句
  • 不能存在过多的条件判断语句
  • 函数体不能过于庞大
  • 不能对函数进行取地址操作

给函数加上inline关键字,编译器也不一定会将此函数当做内敛函数,加上inline关键字只是你对编译器的一个建议,他不一定给你面子,你没有对某一个函数加上inline关键字,编译器有可能也会做优化,将此函数看作是内敛函数,一个好的编译器会将简单的小的函数自动优化为内联函数。(我们只是了解这种内联函数这种机制就好了)

 

收藏 打印