内联函数(inline)
1、用法:在函数声明和定义的前面加上inline
2、目的:内联函数(inline)是为了提高程序的运行速度所做的改进。
程序中执行常规函数的调用时,需要一定的开销,比如将函数参数复制到堆栈,做来回的跳跃等等。
3、内联函数调用则与常规函数不同:内联函数直接将函数代码贴到函数调用的地方,使得程序在调用函数时不用做来回的跳跃等其他操作,从而达到提高程序运行速度的目的。
可见内联函数和常规函数的区别在于C++编译器把它们组合到程序中的方式。
4、何时选用内联函数:虽然内联函数确实可以提高程序的运行速度,但是是以占用更大的内存为代价的,是一种以空间换时间的策略。所以应当在那种函数代码执行时间很短的时候,采用内联函数这种方法。
5、inline是C++新增的特性,它的原始实现其实是C语言中的宏定义——#define。inline和宏定义有以下区别:inline是按值传递参数的,而宏定义是做简单的文本替换;宏是由是由预处理器对宏进行替代,内联函数是由编译器在编译阶段进行的展开。
总之,inline和宏定义有以下区别:
- inline函数是函数,宏不是函数
- 内联函数在编译时展开,宏是在预编译阶段展开的
- 在编译的时候,内联函数可以直接被镶嵌到目标代码中,宏定义只是简单地做文本替换
- 内联函数可以完成类型检查、语句是否正确等编译功能,宏不具备这样的能力
- 宏定义在处理宏参数时要非常小心,容易产生二义性,而内联函数定义时不会产生二义性