内联函数与宏定义的区别:
宏定义可能会得到非预想的结果因为他改变了一些操作符的优先级,而内联函数可以消除这个隐患,他们的区别是宏定义的实现是通过预处理器,而内联函数的实现是通过编译器
内联函数从源码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名,一般在代码中用inline修饰,但是是否能行成内联函数,需要看编译器对函数定义的具体处理
显式内联函数:在类内部声明,在类外部定义
隐式内联函数:在类声明的内部定义
引入内联函数是为了解决函数中程序调用的效率问题,这个就需要知道函数调用的原理了,
函数调用实际上是将程序执行顺序转移到函数所存放的内存中的某个地址,将函数的程序内容执行完后,再返回到调用该函数的地方去。这种转移操作要求在转去前保护现场并记下执行的地址,转回后需要恢复现场,并按照原来保存的地址继续执行,所以函数的调用是有一定的时间和空间上的开销的。有一些函数体代码量不是很大的可以考虑用内联函数来实现可以提高效率,但是会增加目标代码
1 内联函数内部不允许用循环语句和开关语句,如果有编译器就将其作为一般的函数调用
2 内联函数的定义必须出现在第一次被调用前
3 在类声明的内部定义的函数都是内联函数