• 【C++】内联函数讲解和关键字inline纯干货简介


    今日翻看《C++ Primer Plus》,看到一个陌生的东西--内联函数,立马前来记录一下。

    内联函数和常规函数区别

    为了明白内联函数和常规函数的区别,首先需要知道程序运行时,遇到常规函数时如何处理的:

    编译过程的最终产品时可执行程序--由一组机器语言指令组成,运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址,计算机随后逐步执行这些指令。

    常规函数调用的时候,使得程序跳到另一个地址,并在函数结束时返回。

    然而内联函数的编译代码直接与其它程序代码发生了“内联”,也就是说,程序无需跳到另一个位置执行代码。因此其运行速度比常规函数快,但是需要有更多内存。

    一图胜千言:

    inline关键字使用实例

    通常的做法是:将函数定义和函数原型写在一起放在main函数之前,前面加上关键字inline

    例子如下:

    1. #include
    2. inline double square(double x){
    3. return x*x;
    4. }
    5. int main()
    6. {
    7. using namespace std;
    8. double a,b;
    9. double c=13.0;
    10. a=square(5.0);
    11. b=square(4.5+7.5);
    12. cout<<"a="<",b="<
    13. cout<<"c="<
    14. cout<<",c squared="<<square(c++)<
    15. cout<<"Now c="<
    16. return 0;
    17. }

    运行结果:

    可以看出,内联函数和常规函数一样,也是按值传参

    内联与宏

    inline工具是C++新增的特性。C语言使用预处理器语句#define提供宏——内联代码的原始实现,例如:

    #define SQUARE(x) x*x

    这并不是通过传参实现的,而是通过文本替换实现的

    比如:b=SQUARE(4.5+7.5)会变成:b=4.5+7.5*4.5+7.5

    为了解决,可以添加括号,即:

    #define SQUARE(x) (x)*(x)

    但仍有一个问题,比如传入c++的时候,会让c递增两次

    所以如果使用C语言的宏执行类似函数的功能,应该考虑将其转换为内联函数

    对于那些频繁使用且体量小的函数,内联函数是一个非常不错的选择!

  • 相关阅读:
    tensorflow学习1.3-创建会话,启动会话
    [Node] Node.js Webpack打包图片-Js-Vue
    【源码】数据可视化:基于 Echarts + Java SpringBoot 动态实时大屏范例 - 监管系统
    Nginx Linux ubuntu离线安装部署教程
    324. 摆动排序 II
    软件项目管理文档模板目录
    问题: 在Multisim中的 Tools»Show Breadboard,我找不到面包板视图的选项。
    c# 前后台协同
    Mybatis缓存
    Vue渲染函数渲染html
  • 原文地址:https://blog.csdn.net/m0_63222058/article/details/132741103