【C++ 记忆站】内联函数

在这里插入图片描述


在这里插入图片描述

一、概念

以inline修饰的函数叫做内联函数
编译时C++编译器会在调用内联函数的地方展开
没有函数调用建立栈帧的开销
内联函数提升程序运行的效率

在这里插入图片描述

在这样一场景里,堆排和快排排序10w或更多的数据,里面swap函数会被调用很多次,没调用一次都会单独创建一个栈帧,这样空间开销就会很大,严重影响程序运行的效率

C语言解决这个问题只有通过宏

但是宏的缺点有很多,总共有以下几点:

1.可读性差
2.没有类型安全检查
3.不方便调试

同时也有几个优点

1.可维护性高:比如一个宏参数在一段很长的代码中会用到很多次,修改这个参数只需要修改一次定义宏参数这个位置的参数就行了
2.提高效率:减少了栈帧的建立

比如一个ADD宏函数

#define ADD(x,y)((x)+(y))

你需要考虑符号的优先级,就需要通过很多括号让每个变量进行隔开,虽然ADD宏函数这样看起来不是很复杂,但是万一要创建一个变量每次多的函数,其中的关系必须处理得非常准确,不能发生问题,就看起来每次乱和复杂了,而且一个宏函数需要满足几个场景都能实现才能保障程序不会出错

int main()
{
	int a = 0;
	int b = 1;
	cout << ADD(a, b) << endl;

	if (ADD(a, b))
	{

	}

	ADD(a, b) * 3;
	ADD(a | b, a & b);

	cout << ADD(a | b, a & b) << endl;
	return 0;
}

所以C++针对这个问题就提出了内联函数

二、特性

1、inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段,会用函数体替换函数调用

2、inline对于编译器而言只是一个建议若一个函数代码很长则编译器不会将它变成内联

3、一般来说,函数代码在10行及以内时这时编译器会将它优化为内联函数有些编译器是在30行以内

4、内联函数的定义和声明不能分开因为inline被展开后就没有函数地址了,链接时会找不到

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极 衍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值