inline函数也称为内联函数或内嵌函数,inline定义的类的内联函数,函数代码被放入符号调用表,使用时直接展开,不需要调用,即在编译期间将所调用的函数的代码直接嵌入到主调函数中,是一种以空间换时间的函数。
inline函数与普通函数的比较
普通函数有开栈和清栈,inline函数无开栈和清栈。
当执行开销(代码小)< 调用开销(开栈)时,建议用inline
当执行开销(代码小)> 调用开销(开栈)时,不建议使用inline
inline和static 的区别
不同点:(1)内联函数没有开栈清栈的开销,static函数有;
(2)inline编译阶段代码展开导致函数本文件可见,而static是因为符号属性为local本文件可见。
inline和宏的区别
不同点:(1)inline编译时处理有类型检查和安全检查,宏预编译时处理无类型检查和安全检查
(2)宏无法调试,而内联可以进行调试。
(3)内联比宏更加安全,是一种更加安全的宏
相同点: 两个都代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高运行速度。
inline函数的注意事项
- 一般写在头文件中
- 只在release版本生效
- 给编译器的一个建议,循环、递归、switch一定不会出现inline。
- inline基于实现,不是基于声明,即在声明点无效(先声明后内联)