面试题(五、内联函数与宏函数的区别)

内联函数:

内联函数把函数编译好的二进制指令直接复制到函数的调用位置。

内联函数的优点是:能够提高程序的运行速度,但这样会导致可执行文件冗余,因为是牺牲空间来换取时间

内联函数分为显示内联和隐式内联:

显示:在函数前加inline

隐式:在结构、类中直接定义的成员函数,则该函数也被自动优化成内联函数

 

宏函数与内联函数的区别?

1、宏函数不是真正的函数,只是代码的一个替换,因此不会有参数压栈、出栈以及返回值也不会进行参数的类型检查,因此所有类型都可以使用,但这样会带来很大的安全隐患。

而内联函数是真正的函数,函数调用时会进行传参,会进行压栈、出栈,可以有返回值,并进行严格检查参数类型,但这样就不能通用所有类型,如果想被多种类型调用需要重载

2、内联函数是在编译时展开,而宏函数在预编译时展开,在编译的时候,内联函数直接被嵌入到目标代码中去,而宏函数只是一个简单的文本替换过程

3、宏在定义时要小心处理宏参数,一般用括号括起来,否则会出现二义性,而内联函数不会出现二义性

4、inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的,而inline的引入正是为了取消这种复杂的宏定义的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值