C++之内联函数详解

C++之内联函数详解

内联函数的概念

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

为什么有内联函数?

在详细的讲解内联函数之前我们要思考一下为什么会存在内联函数?下面我们以快排算法为例,为大家讲解一下为什么要存在内联函数。

不了解快排的也不需要担心,我们只需要知道在快排中,我们需要频繁的调用swap函数

当我们要使用快排(qsort)时,我们要调用swap函数,而调用函数是需要建立栈帧的!所以数据量一大!我们就要不断的建立栈帧!而频繁建立栈帧这件事本身也是有性能消耗的!

所以为了进一步的优化性能我们该结局和这个问题呢?

在c语言中,我们可以使用宏函数或者直接写在qsort函数里面

直接写在里面就不需要调用函数建立栈帧!但是直接写在里面就失去了复用性!

所以为了具有更高的复用性使用宏函数是更好的选择!

因为宏函数的本质是替换,会在预编译阶段就进行替换也相当于直接写在里面!

但是宏函数本身也是有很多缺点的!

  1. 不能调试!这就是一件非常麻烦的事情,也就是一旦出错我们可能要花很长时间才能发现问题在哪!
  2. 没有类型安全的检查
  3. 宏函数很容易写错!

对于大多数人来说宏函数其实是很少使用的!所以写错也就变得很平常了

下面我举例几个常见的宏的经典错误

#define ADD(x,y) x+y//如果怎么写
ADD(12) *3;
1+2*3;//在预编译阶段!就会这样子!

#define ADD(x,y) (x+y)//那怎么写呢?
ADD(a|b ,a&b);
a|b + a&b;//先不说代码是否可以正确执行,光是用来逻辑判断优先级也是件很麻烦的事情!
//或者换成另一个直观点的例子
#define MUL(x,y) (x*y)
MUL(a+b,b+c);
a+b*b+c;//预编译阶段的结果!

#define ADD(x,y) ((x)+(y))//这样子经过了多次完善才终于得到了一个正确的宏函数
//但是!有的人总会在这里画蛇添足
#define ADD(x
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值