我们在csdn上查阅资料时,是不是会看见很多大佬会在自己的函数前面加上inline这个东西。每次当我看见这个关键字的时候我都会怀疑我看的是不是C语言?!~~
那么,我们今天就来【深度】了解一下inline这个关键字吧~~~~
[正片开始] inline(中文名:内联)是C99标准新增加的关键字,用于修饰函数,目的是提高函数的执行速度。每看见这个关键字,编译器就会对inline性质的函数做速度优化处理,优化原理是把函数调用转变为函数定义中的语句,说白了就是省去建立实参,返回之间的时间,直接执行我们需要的语句。例如:对于一段简单的求和函数,假设定义为
inline int qiuhe(1,2);
编译器便不会按照常理出牌,走正常的函数执行顺序,而是直接把qiuhe(1,2)变成1+2;是不是很方便~~,简直就是刷题超时的终结者。 {脑(diao)补(nao)表(shang)情(mei)包(you)~}
下面是inline的实例
[值得二提] inline应该放在函数的前面。(void:好家伙~~)
[问题来了] inline可以提高函数的执行速度,那我要是把它放在主函数前面,那岂不是美汁汁
(试试就逝世)
【vs2022】 好像并不喜欢这小子儿~在主函数前面(主函数:有被冒犯到~)
先看一下代码整体吧
去掉主函数前的inline后,程序是可以运行的,那这是为什么呢?
[水落石出] inline是以代码的复制为代价来提高执行速度的。每内联(inline)一次,函数就会复制一次,使代码总量增加。一般情况下,函数调用频繁且函数内的代码较少才适合使用inline,尤其是在函数内部有循环、递归的时候是不inline的,所以我上面的代码中的inline全部应该去掉。不过除了主函数前面的,其他的不去掉也是可以的,只是这样做会丢了西瓜
需要兼顾时间复杂性和空间复杂性,inline要慎用
【总结】inline(内联)是函数执行的加速,但不能加速主函数{这符合常理},它本身是修饰函数的关键字,只能放在函数定义的最前面,放在函数声明中不起作用。他是以代码的复制导致代码总量增加甚至是算法空间复杂性的上升为代价而提升函数的执行速度乃至降低算法的时间复杂性的关键字。凡事都具有两面性,inline算不上鸡肋,但使用的度需要自己把握~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)