c++内联函数

内联函数:

内联函数简单来说就是实现在编译时将函数的代码副本放在每个调用函数的地方.
内联函数存在的意义就是解决函数调用的效率问题. 避免了函数栈的开销, 以空间换时间. 但是也会存在代码膨胀的问题, 因此编译器会根据函数代码的长度来决定是否内联, 在类中定义的函数多于 1 行, 则忽略 inline 关键字; 同时在外部定义的内联函数超过 10 行左右也会被忽略 inline. 这种校正规则一定程度上减少了代码臃肿的问题.

在这里插入图片描述
在这里插入图片描述

宏定义:

在C语言中宏可以起到代码替换的作用, 这看似与内联函数有异曲同工之处, 但是我们知道, 宏的缺陷还是比较显著的, 首先是不能调试, 内联函数虽然本质上也是代码展开复制, 但是在 debug 下它并没有真的展开, 所以是能调试的, 在 release 下才展开; 其次是可读性太差, 尤其是对宏定义进行的是非原子操作时, 很容易出现与调用两边代码粘连, 产生不可预期的结果, 而内联函数则没有这种问题, 只需要在函数面前加一个 inline 关键字即可.
宏函数:
在这里插入图片描述
为什么要用do while(0) 这个结构, 是因为如果代码行数过多展开后会产生行错位, 这样函数中的代码周期就会产生影响, 因此这样做可以避免这个问题.
c++用inline, const, enum可以代替宏:
const:
在C语言中, const并不是真正的常量:
在这里插入图片描述
在这里插入图片描述
const修饰的值是可以通过指针间接修改的.
但是在 c++ 中, 同样的代码:
在这里插入图片描述
在这里插入图片描述
我们可以看到, const修饰的值是不允许改变的, 编译不通过.
inline和enum就不一一列举的.

内联函数的特性:

  1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使
    用作为内联函数。
  2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等
    等,编译器优化时会忽略掉内联。
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值