inline关键字和内联函数

一、内联函数

1.1 背景

在大多数的机器上,调用函数都要做很多工作;调用前要先保存寄存器,并在返回时恢复;复制实参;程序还必须转向一个新位置执行。一言以蔽之—— inline 函数避免函数调用的开销

将函数指定为 inline 函数,(通常)就是将它在程序中每个调用点上“内联地”展开,这个过程发生在编译期;正因为如此,也就不会有后来的链接。头文件包含声明,源文件包含定义这一套典型的模式就行不通了(因为这个需要有链接这个动作)。内联函数的定义也可以放在源文件中,但此时只有定义那个源文件可以使用,而且必须要为每一处使用到该函数的源文件拷贝一份定义,修改维护非常困难。解决办法就是—— inline 函数的定义放在头文件。内联函数应该在头文件中定义。

内联函数是一个用于定义的关键字,不是一个用于声明的关键字。 

1.2 与宏的区别

  • 本质不同:宏不是函数,inline是函数。
  • 处理时机不同:内联函数在编译时展开,宏在预编译展开。
  • 功能不同:内联函数可以进行诸如安全检查、语句是否正确等编译功能,宏只是一个简单的文本替换。
  • 二义性问题:内联函数不会出现二义性;宏处理时要小心,一般要用括号括起来。

二、参考文献

【1】讲解内联函数

【2】[C++Primer中文版第4版] P346-347

【3】inline内联函数和宏的区别

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值