【博客38】inline的合理使用!

内容: 今天记录c++ 内联函数的使用。复习了effective c++和以前的笔试,就选择了inline函数这个知识点来总结下。

条例一: inline关键字对编译器不起强制作用,只是对编译器的一种建议而已,建议编译器在函数调用处,用函数体来替换它。(具体看编译器判断后决定是否采取内联)

条例二: inline关键字在调试时,不是很方便,如果展开了函数体,然后消除函数调用,但这样就无法跟踪你那个函数了,有的编译器可能不支持调试内联函数或者是选择不展开。

代码:
在这里插入图片描述
调试:(看到编译器没有内联,继续按照普通方式调用,便于调试)
在这里插入图片描述
条例三: 对函数指针的调用不一定会采取内联

假设有个函数:
在这里插入图片描述
有个函数指针:
在这里插入图片描述
调用:
在这里插入图片描述
结果:此时不是所有编译器都会将函数指针的调用采用内联,像图中的pfun。(见effective c++)

条例四: 不要将带循环的,带递归调用的函数进行内联,编译器不一定同意哦!而是要将短小, 调用频繁的函数进行内联。

条例五: 内联函数如果只写在声明处,那么是不会发挥作用的。要将inline写在函数定义处。

条例六: inline就不要跟virtual一起使用啦,比较作用的时期不同,一个是静态期替换,一起是运行期绑定。

条例七: inline函数无法随着库升级而升级,此时如果库发生更新,那么调用过库中有改变的函数的客户,都得将其程序重新构建,如果是非inline则没有这个烦恼。所以可见inline其实是把双刃剑,有利有弊,需要程序员根据实际情况自行推敲。

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/89683693