目录
1.定义
内联函数就是被inline关键字修饰的函数。
2.特性
inline是一种以空间换时间的做法,内联函数在编译阶段就会被用函数体替换函数调用,优点:减少了函数调用的开销,缺点:可能会使目标文件变大。
3.适用场景
由内联函数的特性可以得知,一般适用于函数代规模较小的,没有循环体的,不是递归的,频繁调用的,否则的话编译器会忽略inline函数的特性。
4如何查看
在debug的版本下我们需要对编译器进行配置,否则不会展开(因为debug模式下,编译器不会对代码进行优化,以下是vs2022设置方式)
正常函数的调用:
下面是内联函数的汇编:
由上图可以看到此时的函数调用指令不在是call add了,而是 红框所示的了。
5内联函数不建议声明定义分离
因为这时候声明和定义分离会2发生链接错误,inline被展开以后,就没有了函数地址,一开始在声明的时候是声明了,所以编译可以通过,但在链接的时候,这时候去寻找函数的地址找不到了,这就是因为inline修饰后函数没有了地址。
//main.cpp
#include"F.h"
inline void f(int i);
int main()
{
f(10);
return 0;
}
//F.h
#pragma once
#include<iostream>
using namespace std;
//F.cpp
#include"F.h"
inline void f(int i)
{
cout << i << endl;
}