当前位置:   article > 正文

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

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

目录

一、内联函数的概念

例子:

二、内联函数的特性

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

宏函数

优点:

缺点:

内联函数

优点:

缺点:


一、内联函数的概念

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

例子:

没有使用内联函数

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

二、内联函数的特性

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

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

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

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

宏函数

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

内联函数

优点:
  1. 内联函数时一个函数,参数有类型,可以进行参数的类型检查,安全性高
  2. 在编译阶段展开,少了调用函数的开销,提高了程序的运行效率
  3. 是一个函数,调式时可以不让编译器展开,方便调式代码
  4. 可读性高,写起来和普通函数没有区别,代码不易发生错误
缺点:
  1. 如果调用过多,可能会导致代码膨胀
  2. inline是一个建议性关键字,它只是给编译器一个建议,但编译器不一定采纳,如果编译器认为不适合设置为内联函数,则编译器会忽略inline,这会给用户造成困扰
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/347662
推荐阅读
相关标签
  

闽ICP备14008679号