[C++]内联函数(内联函数的概念,内联函数的特性,内联函数与宏的区别)

目录

一、内联函数的概念

例子:

二、内联函数的特性

三、内联函数与宏函数的区别

宏函数

优点:

缺点:

内联函数

优点:

缺点:


一、内联函数的概念

以inline修饰的的函数叫内联函数,编译时C++编译器会在调用内联函数的位置将内联函数展开,内联函数没有调用函数参数压栈的开销,内联函数可以提高程序的运行效率。

例子:

没有使用内联函数

使用内联函数(注意:在debug模式下要对编译器进行一些设置才能真正的使用内联函数)

二、内联函数的特性

  1. inline是一种以空间环时间的做法,省去了调用函数的额外开销,所以如果函数很长或者函数内部有循环/递归就不适合定义为内联函数。
  2. inline对于编译器来说只是一种建议,如果编译器认为该函数不适合定义为内联函数,如函数内有循环/递归等情况,则编译器会忽略内联这个关键字。
  3. inline不建议声明与定义分离,分离会导致链接错误,因为内联函数会被展开,此时就没有了函数地址了,链接就会找不到。

三、内联函数与宏函数的区别

首先给一个宏函数的列子供大家回忆回忆宏函数的写法

// 定义一个宏函数,用于计算两个数的最大值
#define MAX(a, b) ((a) > (b) ? (a) : (b))  

宏函数

优点:
  • 在预处理时展开,少了调用函数和参数压栈的开销
缺点:
  1. 在预处理阶段展开,增加了预处理的时间
  2. 在编译之前展开,如果编译时报错,错误不好定位
  3. 参数没有类型,子啊编译之间就已经展开,不能进行参数类型检查,安全性低
  4. 可读性差,代码不好写,容易导致结果出问题
  5. 不能调试
  6. 因为会展开代码,如果调用过多,可能会导致代码膨胀

内联函数

优点:
  1. 内联函数时一个函数,参数有类型,可以进行参数的类型检查,安全性高
  2. 在编译阶段展开,少了调用函数的开销,提高了程序的运行效率
  3. 是一个函数,调式时可以不让编译器展开,方便调式代码
  4. 可读性高,写起来和普通函数没有区别,代码不易发生错误
缺点:
  1. 如果调用过多,可能会导致代码膨胀
  2. inline是一个建议性关键字,它只是给编译器一个建议,但编译器不一定采纳,如果编译器认为不适合设置为内联函数,则编译器会忽略inline,这会给用户造成困扰
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值