inline 函数

inline 函数本文详细介绍了 C 中的内联函数 包括其产生的背景 如何使用 inline 关键字解决栈空间问题 以及内联函数的适用场景 注意事项和性能影响

大家好,欢迎来到IT知识分享网。

学习目标:

        了解并熟练使用inline关键字,分辨inline的使用场景,了解inline使用的利弊。


学习内容:

1,inline函数(内联函数)的产生

           在c++程序中,函数调用消耗的是栈空间,过于频繁调用函数(递归次数太多等)等行为可能造成栈空间的错误。

        inline 函数

           于是为了解决此问题,引入了inline关键字。不仅如此,相比函数调用,inline还能加快部分运行速度(比如不用寄存器的拷贝,函数执行权限的交换,返回值等)。inline通过将函数在调用位置 “内联” 的展开来解决问题,inline关键字要写在函数的开头。示例:

        

inline int fuction(int x, int y) { if (x > y) return x; else return y; } 

             编译器在编译时会其改成类似如下形式代码:

cout << fuction(x,y) << endl; cout << x > y ? x : y << endl;

            将函数调用改写成类似代码用来减少函数调用,从而引起的栈空间不足的问题。

            

2,inline 使用的 注意事项               

        一:inline关键字只适合使用在结构简单代码规模量较小,和频繁调用的函数上。        

          结构简单如不包含while,switch等复杂语句的函数以及递归函数等,太复杂编译器没有能力内联展开。

          代码规模大的话在函数调用位置内联展开对空间而言是一个很大的消耗,很容易得不偿失。

           不频繁调用的没必要,效果不明显。

         二:inline关键字可以重复定义。为避免在不同位置调用内联函数所找的的函数定义不同(在同一个内联函数的不同定义冲突时的情况是未定义的,全看编译器的实现,这就导致该代码跨平台性不好,行为是未预测的)。为避免这种情况,建议将inline函数的定义都放在头文件中,这样可以保证定义一样。

         三:inline关键字是一个注重函数定义的关键字,只放在声明面前而不放在定义面前是不起作用的。

//该函数不是内联的 inline void function(); void function() { cout << "function" << endl; } //该函数是内联的 void function(); inline void function() { cout << "function" << endl; } 

  当然,声明和定义都加上inline 那肯定是内联的。

                

       四:inline 只是对编译器的一种建议,编译器可以选择性忽略inline。能符合第一点自然就给你展开了,相反就当耳边风了。             

       五:在类内(class,struct) 定义的函数默认是inline,而在类内声明,在类外定义是需要在定义处加上inline 关键字的。

3,inline 的利弊

         inline函数能减少函数调用的栈空间开销和运行速度,但同时也增加了代码量。在使用inline时要注意分辨利弊。利大于弊则用,反之则不用,是很简单的道理。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120886.html

(0)
上一篇 2025-10-26 21:15
下一篇 2025-10-26 21:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信