内联函数
1.定义
2内联函数与其他函数的区别
2 .使用规则
3 .使用范围
4内联函数与宏的区别
5内联函数的优缺点
1.定义
以inline 修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开。它的优点是没有函数压栈的开销,
内联函数提升程序运行的效率。
2内联函数与其他函数的区别
1)内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,这与一般函数不同,主函数在调用一般函数的时候,是指令跳转到被调用函数的入口地址,执行完被调用函数后,指令再跳转回主函数上继续执行后面的代码;而由于内联函数是将函数的代码直接放在了函数的位置上,所以没有指令跳转,指令按顺序执行
2)一般函数的代码段只有一份,放在内存中的某个位置上,当程序调用它是,指令就跳转过来;当下一次程序调用它是,指令又跳转过来;而内联函数是程序中调用几次内联函数,内联函数的代码就会复制几份放在对应的位置上
3使用规则
一般在使用内联函数时,必须将inline 关键字与定义的函数体写在一起才可以实现内联,如果只是在函数前面加上inlie关键字,是不能达到内联的效果。举个例子
4使用范围
1).inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜
使用作为内联函数。被反复调用时也不建议使用。
2.)
inline
对于编译器而言只是一个建议
,编译器会自动优化,如果定义为
inline的函数体内有循环/递归等
等,编译器优化时会忽略掉内联。
3) inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会
找不到。
5关于内联函数与宏的区别
宏函数的优点就是在预处理阶段就会展开,少了函数调用的开销,(传参,参数压栈以及栈帧开销)
缺点:在预处理阶段(预处理-编译-汇编-链接)就发生替换,不会参与编译,少了类型检测。
举个例子
内联函数相对于宏函数的不同,就是它是在编译阶段发生替换,可以解决上例中的问题。
因此在c++中宏函数定义 换用内联函数。
6内联函数的优缺点
优:避免了指令的来回跳转,加快程序执行速度
缺:代码被多次复制,增加了代码量,占用更多的内存空间
参考博客:https://blog.csdn.net/qq_33757398/article/details/81390151