写在前面
接下来又要学一个关键字了--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++大神就绕吧,非喜勿喷,毕竟这是个人的学习笔记📒
网友评论