❤️女朋友面试被问内联函数❤️一文讲的明明白白!

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️女朋友面试被问内联函数❤️一文讲的明明白白!相关的知识,希望对你有一定的参考价值。


🎈 作者: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分钟理解指针和引用的区别【❤️建议收藏❤️】


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


以上是关于❤️女朋友面试被问内联函数❤️一文讲的明明白白!的主要内容,如果未能解决你的问题,请参考以下文章

❤️学妹面试被问volatile❤️,我一篇文讲解的明明白白!

❤️学妹竟然问struct和class的区别❤️,我一篇文讲的明明白白!

❤️学妹竟然问我网络视图和滚动视图的区别❤️,我一篇文讲的明明白白!

❤️五分钟结束面试,发奋图强爆肝一周,再也不怕被问到Redis了(阿里面试官给我的题库)❤️

❤️BitmapsHyperLogLogGeospatial❤️——Redis三大特殊数据类型详述(万字长文原理讲解,大厂面试高频知识点,一文尽收囊中)

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