内联函数和宏的区别

1、替换的时机

内联函数是在编译期间进行替换,就是将该函数在函数的调用点直接展开

宏函数是在预处理阶段替换

2、替换的成功率

内联函数只是对编译器的一个建议,如果编译器觉得该函数不适合成为内联函数时,便会忽略前面的[ inline ]关键字,比如我们将递归函数写成内联函数,编译器会忽略前面的[ inline ]关键字(不会再调用点展开),把它当做一个普通的递归函数处理,

宏一旦定义则在预处理阶段一定会替换

3、生效版本

内联函数是在release版本下才生效

宏都可以

4、安全检查

编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数)

宏定义只是进行简单的替换,不会进行安全检查

5、是否可以访问类成员变量

内联函数可以访问类的成员变量

宏定义不能

总结:

  • 内联函数关键字为inline和普通的函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的替换。
  • 内联函数要做参数类型检查,而宏函数则没有。
  • 内联函数是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率的提高,而且和C中的宏比较起来,inline函数更安全可靠。但是增加了空间上的消耗。
  • 宏是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入到调用的地方,而减少了普通函数调用时的资源消耗。
  • 宏不是函数,只是在编译前将程序中有关字符串替换成宏体。inline函数是函数,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。

使用内联函数的场景:

(1)一个函数被不断的重复调用

(2)函数只是简单的几行,而且函数内不包含for,while,switch语句。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值