• C++ 内联函数的作用


    1. 什么是内联函数?
      内联函数的定义很简单,在函数定义前面加上关键字inline即可,例如:
    inline void func(){
        //函数体
    }
    
    • 1
    • 2
    • 3

    当程序编译的时候,其他调用func()函数的地方,会被func()函数的函数体替换,比如:

    #include <iostream>
    using namespace std;
    
    inline void func(){
        //函数体
        int A = 3;
        cout<<A<<endl;
    }
    int main(){
        int A = 5;
        func();
        cout<<A<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    程序在编译的时候,main()中的func()会被int A = 3; cout<<A<<endl;代替。而且,内联函数里的局部变量依然只作用于函数体内。
    2. 内联函数存在的意义是什么?

    第一,提高函数调用效率。当函数仅有简单几行代码时,调用此函数的主要开销在调用机制上了,可能还要别的文件查询,而内联函数就节省了这一笔开销。但是需要注意的是,仅在函数功能十分简单的时候才有用。
    第二,代替带参数的宏。#define A B可以将代码中的A在编译阶段都用B代替,但是当B是一个表达式的时候,会增加程序出现逻辑bug的风险。比如下面的代码:

    #include <iostream>
    using namespace std;
    #define Q(x) x*x
    
    int main(){
        int a = 1;
        cout<<Q(a+1)<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    你会发现,程序输出结果并不是我们预想中的4,而是3,因为#define指令在编译的时候,只是简单粗暴的将Q(a+1)换成了a+1*a+1。当然,我们给第三行改成#define Q(x) (x)*(x),确实能够解决例子中的问题,但是如果Q(a+1)变成了10/Q(a+1),你会发现结果又不对了,因此#define在替换成表达式的时候需要格外小心,但是使用内联函数就不会有这么多顾虑了。

    1. 注意事项
      第一,不要在函数体比较复杂的时候使用;
      第二、内联函数在编译完了之后就消失了,所以不要将函数定义和函数调用写在不同文件(除非写在头文件),否则可能出现某个地方调用了该函数,但是链接器又找不到的情况。
  • 相关阅读:
    SpringBoot整合Redis
    桐乡上元——UI设计
    计算机毕设(附源码)JAVA-SSM家纺商品展示平台
    Dubbo 原理与部署
    Exposure Normalization and Compensation for Multiple-Exposure Correction 论文阅读笔记
    Stream流中的groupingBy分组操作
    寻找领域不变量:从生成模型到因果表征
    [附源码]Python计算机毕业设计Django高校后勤保障系统
    PICO高管专访:关于PICO 4硬件、内容、定价、海外布局的一切解答
    ros发布节点和接收节点的编写
  • 原文地址:https://blog.csdn.net/a1367666195/article/details/125621646