一文搞懂内联函数!


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏:C/C++面试通关集锦 (优质好文持续更新中……)🚀


目录

一、什么是内联函数?

二、为什么要使用内联函数 ?

三、哪些函数不能是内联函数?

四、使用内联函数的缺点

五、总结


内联函数想必大家都很熟悉,适当的使用内联函数可以提高程序的执行效率。本篇文章就来讲解下内联函数,赶紧来看下吧!

一、什么是内联函数?

内联函数是在 C++ 中增加的一个功能,可以提高程序执行效率。如果函数是内联的,编译器在编译时,会把内联函数的实现替换到每个调用内联函数的地方,可以与宏函数作类比,但宏函数不会进行类型检查。

可以将普通函数或者类的成员函数声明为内联。

内联函数一般要求如下:

1. 函数简短,通常3-5行;

2. 函数内没有复杂的实现,比如:包含while、for 循环,递归等;

3. 通常在多处有调用;

注意:函数声明为内联,仅仅是对编译器的建议,如果函数比较复杂,编译器会将其看做普通函数。

来看一个简单的例子,如下所示:

#include <iostream>

using namespace std;

inline int Add(int x, int y) {
   return x + y;
}

int main() {

    cout<<"5 + 8 = "<<Add(5, 8)<<endl;
    cout<<"10 + 20 = "<<Add(10, 20)<<endl;
    return 0;
}

输出结果为:

linuxy@linuxy:~/inlineFunction$ ./main 
5 + 8 = 13
10 + 20 = 30
linuxy@linuxy:~/inlineFunction$

在代码执行的时候是这样的:

int main() {

    cout<<"5 + 8 = "<<5 + 8<<endl;
    cout<<"10 + 20 = "<<10 + 20<<endl;
    return 0;
}

内联函数在调用处展开了。

再来看一个类的内联函数,如下所示:

#include <iostream>
using namespace std;

class Node {
public:
    int Add(int x, int y);
};

inline int Add(int x, int y) {
   return x + y;
}

int main() {

    return 0;
}

注意:定义在类中的函数,默认情况下都是内联的,比如下面这种情况。

#include <iostream>
using namespace std;

class Node {
public:
    int Add(int x, int y) {//默认是内联函数
        return x + y;
    }
};

int main() {

    return 0;
}

但是,如果函数很复杂,编译器会将其作为普通函数来处理。

二、为什么要使用内联函数 ?

引入内联函数主要是解决一些频繁调用的小函数消耗大量空间的问题。

通常情况下,在调用函数时,程序会将控制权从调用程序处转移到被调用函数处,在这个过程中,传递参数、寄存器操作、返回值等会消耗额外的时间和内存,如果调用的函数代码量很少,也许转移到调用函数的时间比函数执行的时间更长。而如果使用内联函数,内联函数会在调用处将代码展开,从而节省了调用函数的开销。

三、哪些函数不能是内联函数?

1. 递归调用本身的函数;

2. 包含复杂语句的函数,例如:for、while、switch 等;

3. 函数包含静态变量;

四、使用内联函数的缺点

1. 如果使用很多内联函数,生成的二进制文件会变大;

2. 编译的时间会增加,因为每次内联函数有修改,就需要重新编译代码。

所以,并不是所有函数都要声明为内联函数,需要视具体情况而定。

五、总结

内联函数能够减少函数调用的开销,但是,应该在符合一定内联函数的情况下使用。

⭐推荐阅读⭐

❤️俄罗斯方块游戏❤️,重温经典(C++详解版)

野指针?悬空指针? 一文带你搞懂!

【万字整理】❤️8大排序算法❤️【建议收藏】

3分钟理解指针和引用的区别【❤️建议收藏❤️】


🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


  • 64
    点赞
  • 199
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值