内联函数
内联函数是C++为提高程序运行速度所做的一项改进,其编写方式与常规函数并没有本质的不同(除了不能递归与关键字inline之外)。
内联函数的意义?
在程序运行过程中,如果需要调用一个函数,程序会保存当前函数的执行现场,将函数中的局部变量以及函数地址压入堆栈,然后再将即将调用的新函数加载到内存中,这要 经历复制参数值、跳转到所调用函数的内存位置、执行函数代码、存储函数返回值等过程,当函数执行完后,再获取之前正在调用的函数的地址,回去继续执行那个函数。 如果程序多次调用这个函数,势必造成一定的开销。
内联函数提供另一种选择:内联函数的编译代码与当前程序的代码“内联”起来,也就是编译器将使用相应的函数代码替换函数调用。对于内联代码,程序无需跳到另一个位置执行代码,再跳回来。
内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。
不易使用内联函数的情况
- 函数体内的代码比较长,使用内联将导致可执行代码膨胀过大
- 执行函数代码的时间比处理函数调用机制的时间长,则节省的时间将十分有限。
- 内联那些包含循环或 switch 语句的函数常常是得不偿失 (除非在大多数情况下, 这些循环或 switch 语句从不被执行)。

内联与宏
inline 是C++新增的特性。C语言使用预处理器语句#define 来提供宏(内联函数的原始实现)。 E.g., 这是一个计算平方的宏:
#define SQUARE(X) X * X
- 宏只做简单的字符串替换,而内联函数可以进行参数类型检查,且具有返回值(也能被强制转换为可转换的合适类型)
- 宏不能按值传递,不经计算而直接替换参数,函数调用则是将参数表达式求值再传递给形参。 比如通过宏 a = SQUARE(c++) 将会替代为 c++ * c++
- 内联函数首先是函数,函数的许多性质都适用于内联函数(如内联函数可以重载)
- 内联函数可以作为某个类的成员函数,这样可以使用类的保护成员和私有成员。而当一个表达式涉及到类保护成员或私有成员时,宏就不能实现了(无法将this指针放在合适位置)
来源:https://www.cnblogs.com/not-found-404/p/9361344.html