c++---内联函数

为什么会有内联函数

函数在调用的时候会创建函数栈帧,但是栈帧的创建时会消耗性能和资源,而且当函数的内容并不多时,函数栈帧所消耗的性能和资源可能要大于函数内容的本身,尤其是哪种还要大量的调用的小函数,所以我们c语言就给出了一个解决办法就是宏,他可以直接在使用处进行替换而不会调用函数创建栈帧,那么这是c语言提供的方法,c++为了解决上述问题同样提供了一个方法就是内联函数,他的原理跟宏函数差不多也是在调用函数的地方直接进行内容替换而不创建栈帧,那么这里有小伙伴可能会有这样的疑问,既然c语言提供了宏函数,那为什么c++还要提供一个内联函数呢?原因也很简单,因为宏函数他不好用啊!比如说宏函数有下面这三个缺点:

1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查 。

并且宏函数最大的缺点就是太容易写错了比如用宏函数实现一个加法函数:很多人的一开始的写法是下面这样

#define add(x,y) x+y;

这对吗孩子?看起来很对实际上错误一堆比如说我要执行下面这段表达式:add(1,2)*2我们想要看到的结果肯定是6可是程序跑出来的结果却是5,这是因为宏函数是直接替换表达式会变成下面这样:
1+2*2所以得到的结果就是5,那么在外层加一个括号能否解决问题呢?比如说下面这样:

#define add(x,y) (x+y);

答案是还是不行,因为参数的传递可能是一个表达式比如说这样:add(1&2,2|3),因为不同的操作符的优先级不同所以当参数为表达式时也会出现问题,所以这里的解决方法就是对x和y分别加上括号,比如说下面这样:

#define add(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶超凡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值