内联函数与宏的关系

为什么使用内联函数

 在C中,我们经常将一些短而执行频繁的函数写成宏的形式,这会减小函数调用的开销,从而提高效率,但这经常会出现一些难以发现或者无法解决的问题。在C++中使用宏定义会出现一个问题,预处理器不允许访问类的成员,即预处理宏不能作为类成员的函数。为了解决这一问题,从而引入了内联函数,使得能够在类中访问自如。

使用宏所出现的问题

1°简单问题如下:

#include <iostream>
#define ADD(a,b) a+b
int main(void){
	int a = 1;
	int b = 2;
	cout<<ADD(a,b)*5<<endl;//结果为11
	//实际上为cout<<a+b*5<<endl;这将无法达到我们所需要的(a+b)*5的预想。
	/**
	* 解决方法为:#define ADD(a,b) (a+b)
	*/
}

2°难题如下:

#include <iostream>
#define MAX(a,b) a>b?a:b
int main(void){
	int a = 1;
	int b = 2;
	cout<<MAX(++a,b)<<endl;//结果为3
	//原因为:++a>b?++a:b,这里先执行了两次a+1,在进行比较
	/**
	* 此时若按上题方法,改为#define MAX(a,b) (a)>(b)?(a):(b)
	* 会发现结果还是3,所以这个问题难以解决,但是用内联函数将轻松解决
	*/
}

内联函数解决如下:

#include <iostream>

inline int MAX(int a,int b){
	return a>b?a:b;
}
int main(void){
	int a = 1;
	int b = 2;
	cout<<MAX(++a,b)<<endl;//此时结果为2
}

特点

 宏是在预处理阶段进行处理,内联函数是在编译阶段进行处理。内联函数和宏一样,并不会有调用函数,压栈和出栈等操作,可以提高效率,可以说是空间换取时间的方法。值得注意的是并不是所有的函数都能定义为内联函数,内联函数中不应有循环和过多的判断,函数体也不能太大。内联只是建议编译器将此函数当作内联函数,具体有没有当作那是编译器的事情了。
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值