inline函数的总结

本文总结了C++内联函数的使用方法、存放位置、优缺点及不适用情况。内联函数通过在调用处展开函数体来提高效率,但可能导致代码膨胀。通常不适用于递归、含有循环或switch的函数、虚函数以及构造和析构函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思维导图

在这里插入图片描述

1.使用方法

  • 1.在函数返回类型前加Inline。成员函数可以在声明时候添加Inline也可以在定义时候添加inline。
  • 2.将成员函数定义在类定义式内,这个成员函数就被隐喻为Inline。
  • 3.头文件中如果想定义inline函数,必须包含定义。

内联说明对于编译器仅仅是一个建议,编译器可以忽略这个建议
下面没有加lnline的时候,机器进行编译操作

在这里插入图片描述
一般的函数调用,进行压栈操作,导致系统开销加大,花费了更多时间。
下面是加了inline的编程代码:
在这里插入图片描述
用inline修饰的函数,在编译时会在调用的内联函数地方展开,没有压栈开销。以空间为代价,提高了效率。

2.内联函数存放的位置:

放在头文件,并且声明和定义最好不要分离,不然可能出现链接错误。因为在编译过程中进行Inlineing。为了将“函数调用”替换为“被调用函数的主体”,编译器必须要直到函数长什么样的,仅仅是声明是不够的。把内联函数定义在头文件,可以确保在调用函数的时候使用的定义是相同的。
可以放在源文件中,但多个源文件的同名inline函数实现必须相同。

3.内联函数的优点:

可以避免调用函数的开销。当函数比较小的时候,内联函数可以令目标代码更加高效。对于存取函数以及比较短的执行函数。

4.内联函数的缺点:

  • 1.由于内联函数将对函数的每个调用都以函数本身代替。所以会增加代码的大小。造成代码膨胀,不利于在内存不大的机器上运行。
  • 2.很多编译器无法调试内联函数
  • 3.inline无法随着程序的升级而升级。

5.不适用情况:

  • 1.大多数编译器不支持递归函数的内联
  • 2.包含循环或switch语句的内联时得不偿失的,除非在大多数情况下这些循环或switch语句不执行。
  • 3.虚函数
    • 所有对虚函数的调用都会使inline落空。因为虚函数意味着:等待,直到运行期才确定调用哪个函数。而调用内联函数意味着:执行前,先将调用动作替换为被执行函数的本体。由于编译器不知道调用哪个函数,导致虚函数无法使用Inline进行内联操作。
  • 4.构造函数和析构函数
    • 编译器会为析构函数和构造函数插入许多代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值