当前位置 : 主页 > 编程语言 > c语言 >

C++入门:内联函数

来源:互联网 收集:自由互联 发布时间:2023-08-25
1.概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 如果在上述函数前增加inline关键

1.概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

C++入门:内联函数_函数调用

如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。


查看方式:

1.在release模式下,查看编译器生成的汇编代码中是否存在call Add:

C++入门:内联函数_函数调用_02


2.在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化,一下给出VS2022的设置方式):

C++入门:内联函数_编译器_03

C++入门:内联函数_内联函数_04


C++入门:内联函数_内联函数_05


2.特性


  1. inline是一种以空间换时间的做法,如果编译器将函数当作内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。


  1. inline对于编译器而言只是一个建议,不同编译器对于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现),不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。以下为《C++prime》第五版关于inline的建议:

内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。一般来说,内联机制用于优化规模较小、流程直接、频繁调用的函数。很多编译器都不支持内联递归函数,而且一个75行的函数也不大可能在调用点内联地展开。


  1. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。



【转自:美国多ip服务器 http://www.558idc.com/mgzq.html 欢迎留下您的宝贵建议】
上一篇:AcWing 861. 二分图的最大匹配
下一篇:没有了
网友评论