inline定义的内联函数

目录

内联函数的概念

内联函数和宏定义的比较

内联函数的优点与不足

类与内联


内联函数的概念

概念:经过inline修饰的函数,编译器在使用这个函数的时候会自动将这个函数展开,所以没有了函数创立栈帧的开销提高了程序的运行效率

inline int Add(int x, int y) //内联函数的样例
{
	return x + y;
}

内联函数和宏定义的比较

#include<iostream>
using namespace std;

#define ADD(a,b) ((a)+(b))    //宏定义

inline int Add(int x, int y)    //内联函数
{
	return x + y;
}

int main()
{
	int a = 0;
	int b = 0;
	Add(a, b);
	ADD(a, b);
	return 0;
}

我们先来介绍一下宏定义

宏定义在预处理阶段就会被展开

所以存在一些问题

1、不支持调试

因为宏定义在预处理阶段就被展开了,而调试是在编译阶段

2、语法复杂

为了防止宏定义出错,我们往往写的很复杂

比如:

#define ADD(a,b) ((a)+(b))    //用了多个括号围着

如果没有这些括号

#define ADD(a,b) a+b

int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	c* ADD(a, b);	//将会变成3*1+2
	return 0;
}

3、没有类型安全的检查

宏可以对任意类型的变量进行预处理,所以存在不安全性

#define ADD(a,b) ((a)+(b))

int main()
{
	int a = 1;
	int b = 2;
	double c = 0;
	double d = 0;
	ADD(a, b);	//对整型进行替换
	ADD(c, d);	//对浮点型进行替换
	return 0;
}

而内联函数没有这些问题,但是它也有自己的问题

内联函数的优点与不足

优点:

没有宏定义那种缺陷

缺点:

1、内联函数只适用于比较小的函数,因为假如函数很大,那么被展开的时候将会很大程度上占用空间

2、 inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到

3、编译器有可能会自动忽略掉函数体很大,或者带有递归的内联函数

4、内联需要在定义时候使用inline,声明时候时候inline没有效果

类与内联

1、在类内定义的函数都是内联函数,不管是否有inline修饰

2、函数声明在类内,定义在类外,需要在类外的函数返回值前面使用inline

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起慢慢变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值