05-内联函数

写在前面

接下来又要学一个关键字了--inline
使用inline修饰函数的声明或者实现,可以使其变成内联函数
建议声明和实现都增加inline修饰

名词解释

特点:
编译器会将函数调用直接展开为函数体代码 
可以减少函数调用的开销 
会增大代码体积
内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,
不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,(这尼玛又逼着我学汇编,还好大学时学过😏)
就像整个函数体在调用处被重写了一遍一样

码上封口

将main.m 改为mian.mm 文件
#include <iostream>
using namespace std;

//声明内联函数
inline int sum(int a, int b);

int main() {
    
    cout << "sum的和是:"<< sum(10, 20) << endl;
}

//内联函数的实现
inline int sum(int a, int b) {
    return a + b;
}

码来补充

◼ 内联函数和宏,都可以减少函数调用的开销 
◼ 对比宏,内联函数多了语法检测和函数特性
◼ 思考以下代码的区别 #define sum(x) (x + x)
inline int sum(int x) { return x + x; } 
int a = 10; sum(a++);

装逼一下

函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,
接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,
最后才跳转到函数内部执行。这个过程是要耗费时间的。

另外,函数执行 return 语句返回时,需要从栈中回收形参和局部变量占用的存储空间
,然后从栈中取出返回地址,再跳转到该地址继续执行,这个过程也要耗费时间。


一般情况下,这个开销可以忽略不计。但是,如果一个函数内部没有几条语句,执行时间本来就非常短,
那么这个函数调用产生的额外开销和函数本身执行的时间相比,就显得不能忽略了。假如这样的函数在一个循环中被上千万次地执行,
函数调用导致的时间开销可能就会使得程序运行明显变慢。

作为特别注重程序执行效率,适合编写底层系统软件的高级程序设计语言
,C++ 用 inline 关键字较好地解决了函数调用开销的问题。

完整代码demo,请移步GitHub:DDGLearningCpp

当然C++大神就绕吧,非喜勿喷,毕竟这是个人的学习笔记📒

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容