浅谈内联函数(C++)

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈内联函数(C++)相关的知识,希望对你有一定的参考价值。

内联函数实质上是空间换时间,因为函数调用的时候存在压栈和出栈,会存在消耗,内存是没有额外消耗的,因为在函数调用结束的时候会释放内存,所以普通的函数调用只是费多了一点时间。如果用内联函数,则在调用函数的时候直接“内联展开”,直接在调用函数的时候就执行了函数体内部的函数逻辑,不需要额外的内存来进行操作函数体内部逻辑。

类里面的成员函数默认为内联函数。
如果函数声明的时候标明了inline,那么实现的时候也要标明inline,否则只有声明的inline而没有函数实现的inline,仍然会当作普通函数调用。

既然内联函数这么牛,那为啥不把所有的函数都写成内联函数呢?其实是可以写的,但是执不执行又是另外一回事了。

内联仅仅是给编译器的一个参考建议,编译器不一定会接受,如果没有将函数声明为内联函数,那么编译器也可能将此函数做内联编译。

以下情况编译器可能不会考虑使用内联编译:
1、存在循环语句
2、存在过多的判断语句
3、函数体过于庞大
4、只要对函数进行了取地址操作,则默认该函数不是内联函数,因为内联函数是放进符号表内的,没有地址。

注:对于任何类型的函数,编译器都会把函数名字、参数类型、返回值类型存入符号表中。同样,当编译器看到了内联函数,也是会把内联函数放进符号表。

**总结:**该写什么函数就写什么函数,到底用不用内联函数还是编译器说了算。就像你要跟一个女生表白,她不一定会接受你。你不跟她表白,如果你符合她的条件了,她可能会倒过来向你表白。所以把函数该完成的任务封装好,用普通函数调用还是内联函数,等编译器自己决定吧。或者可以理解为,这是C++语言的一种默认优化处理,自动识别提高执行效率。

以上是关于浅谈内联函数(C++)的主要内容,如果未能解决你的问题,请参考以下文章

C++ 为啥要引入内联函数、、

何时可以/将在 C++ 中内联函数?可以强制内联行为吗?

C++基础语法梳理:inline 内联函数!虚函数可以是内联函数吗?

复习笔记——C++内联函数

c++中的内联函数inline

C++基础--inline