概念
用inline修饰的函数叫做内联函数,内联函数在编译的时候C++编译器会在调用的地方展开,没有函数调用建立栈帧的开销,使得程序运行效率提升。
未修饰内联的函数,调用函数后call func函数地址,并且建立函数栈帧,函数体不展开。

修饰内联的函数,调用函数后没有call func函数地址,不建立函数栈帧,函数体展开。

内联函数是C语言宏函数的改进
在C语言宏函数中,虽然能够增强代码的复用性、提高性能,但是它的缺点更为显著:
内联函数的出现,能很好解决这些问题。
内联函数是一种以空间换时间的做法,通过将函数体展开,使得函数方便调试、能够有类型的检查、程序格式更加合适,但内联函数的缺点有什么呢?
其实内联函数的修饰 inline 在对于编译器而言只是一个建议,不同编译器关于inline有着自己的判断标准,一般函数规模较小,不是递归且调用频繁的函数才会采用inline修饰。
为什么要加以限制呢?
如果多次调用一个内联函数,并且函数比较长或者有一个很深的递归实现,那么在调用展开后代码将会变得非常长,容易造成代码膨胀。
比如:

内容膨胀造成可执行程序(.exe)的文件大小变大,软件安装包也就变大了,用户下载就得吃力。
所以编译器会自行判断展开,并且内联函数展开后得规模小。
inline不建议声明和定义分离,分离会导致链接错误。
如果对编译链接不太熟可以看看程序的编译和链接。
一个正常链接过程


这样就可以正常的运行一个程序。
加入inline声明的链接过程

如果函数声明和定义在一个文件,就不需要链接,所以内联函数的声明和定义应该放在一个文件中。