『C/C++』关键字 inline:内联函数
之前参加竞赛时,总是会看见一些大佬的函数前面加上个inline
,比如下面的快读:
1 | inline int read() |
问之,则曰:
“这样会运行快一点”
但是我一直都没搞懂,为什么说这样运行就会快一点
今天特地查了一下,这个inline
是内联函数的标识符,那内联函数又是什么?
如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方
这样一来,优点就显而易见了:普通函数都是单独保存的,当你调用函数时,要先通过指针跳到函数的位置再运行,而内联函数直接就嵌在调用该函数的地方(类似于宏替换),省去了寻址步骤,自然更快
也许你可能会问,一个寻址要耗多少时间呢?但其实对于非常简单的函数来说(如两个int
求较大值),寻址的时间占比就很大,而这种简单的函数往往又是比较常用的,一来二去,寻址时间就又被放大了
但缺点也是显而易见的:增加内存消耗,并且内联函数中不能递归调用自己
所以,只有短小简单,调用又十分频繁的函数才适合作为内联函数
使用起来很简单,在函数头前面加上个inline
就行,但有一点要注意,inline
修饰的函数要当场给出其原型,并且inline
在声明的时候是没有用的,只有定义的时候才有用
这个写法是无效的:
1 | inline int max(int a,int b); |
这个写法是有效的:
1 | int max(int a,int b); |
PS:C++ 的类里面的成员函数会被默认为内敛函数
评论
GiscusTwikoo