内联函数


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

 

相关文章: