【C++】简单理解内联函数

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

内联函数

1.内联函数的概念

以inline修饰的函数叫做内联函数编译时C++编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率。

2.C++为什么要有内联函数

在C语言中宏函数也无需创建函数栈帧而是在预处理阶段将写好的宏函数进行代码的直接替换。但是这种的直接替换虽然可以提高代码的复用性和性能也会造成一些缺点。
比如
1.不方便调试宏。
2.导致代码可读性差可维护性差容易误用。
3.没有类型安全的检查。

所以C++为了弥补这些缺点就开创了内联函数。

3.内联函数展示

要使用内联函数在函数的名字定义前加上inline即可

#include <iostream>

using namespace std;

inline int ADD(int x, int y)
{
	return x + y;
}
int main()
{
	int tmp = 0;
	tmp = ADD(3, 2);
	return 0;
}

3.1查看方式

  1. 在release模式下查看编译器生成的汇编代码中是否存在call Add
  2. 在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化以下给出vs2019的设置方式)

1.选择调试属性
在这里插入图片描述
2.在常规里面选择调试信息格式-程序数据库
在这里插入图片描述

3.然后优化->选择内联函数扩展->选择只适用于_inline(/Ob1)
在这里插入图片描述

3.2 观察汇编代码

我们先来看看debug下没有优化后前的汇编代码

在这里插入图片描述

这条call指令说明创建了函数栈帧。

我们再来看看优化后的汇编代码

在这里插入图片描述

可以看到使用内联函数优化后并没有调用函数而是像宏一样直接展开了。

4.使用内联函数的注意事项

程序员请求将函数作为内联函数时编译器并不一定会满足要求。它可能认为该函数过大或注意到函数调用了自己内联函数不能递归因此不将其作为内联参数而有些编译器没有启用或实现这些特性。

5.内联函数缺点和优点

通过注意事项我们可以知道当函数的代码函数过多时编译器可以会忽略程序员的请求。
这就说明内联函数的缺点是可能会使目标文件过大
优点就是
1.少了调用函数的开销提高程序运行效率。
2.相比于宏也便于调试。
3.写代码方便避免了宏的一些易错情况

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++