C++学习-内联函数

1、内联函数的作用

每一次函数调用都要把原来正在运行的函数的大量数据以及状态标志等压栈,所以每一次函数调用都要消耗栈空间,而频繁的调用小函数便会大量的消耗栈空间。于是c++中便特别地引入了inline修饰符,表示为内联函数。

内联函数事实上是在调用程序中对被调用的内联函数进行展开,这样便避免了频繁调用函数对栈内存重复开辟所带来的消耗。

2、内联函数的具体实现方式

编译器将函数类型包括函数名、参数个数及其类型还有返回值类型保存在符号表中,当函数体的语法无误时将其实现也保存在符号表中,代码的形式取决于编译器。当遇到调用内联函数时,编译器会分析参数和返回值类型并可能做适当的强制转换,都没有问题时就会进行代码替换,并可能还有进一步的优化。

3、内联函数与宏展开的区别

宏展开是单纯的代码替换,在预处理阶段完成,因为是简单的代码替换,所以很容易出现悲剧;inline函数虽然也是对函数进行展开,但是在编译阶段进行代码展开,参与类型检查,满足类型和作用域规则。

4、内联函数的局限

内联函数是编程者向编译器提出的一个申请,当内联函数的函数体过大时,编译器可以拒绝申请,这样内联函数的执行效率便和普通函数一样了,所以内联函数不能包含复杂的控制语句例如while、switch等,并且内联函数本身不能是直接递归函数。
  

5、内联函数应用

对类中的私有成员进行赋值和访问等操作的函数常常声明为内联函数,因为这些函数往往函数体较小,但却经常被调用,使用内联函数可以大大提高程序效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: C++中的内联函数和宏函数都可以用来提高代码的运行速度,但它们在实现方式和功能上有一些区别。内联函数在编译时展开,而宏函数在预编译时展开。内联函数会被直接嵌入到目标代码中,而宏函数只是简单地进行替换。内联函数具有类型检测、语法判断等功能,而宏函数没有这些功能。此外,内联函数满足函数的性质,比如有返回值、参数列表等,而宏函数没有这些限制。内联函数可以进行调试,而宏函数不可以。另外,宏函数不能访问对象的私有成员,但是定义在类内的内联函数可以访问。\[3\]因此,内联函数相对于宏函数来说更加安全和灵活,可以更好地解决函数调用开销的问题。 #### 引用[.reference_title] - *1* *2* [C++内联函数与宏函数](https://blog.csdn.net/suren_jun/article/details/127243191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++:宏函数和内联函数(一看就明了)](https://blog.csdn.net/qq_44851228/article/details/108742194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值