关于函数的一些问题

文章讨论了C++中自增运算符在不同情况下的行为,特别是与函数参数结合时的复杂性。代码示例展示了由于运算符优先级和变量引用导致的非预期结果,如333和321的输出。这强调了理解运算符行为以及谨慎使用函数参数的重要性。
摘要由CSDN通过智能技术生成

对于如下代码,你觉得输出是多少?

#include<cstdio>
using namespace std;
using UL=unsigned long;
int main()
{
	register UL cnt(0);
	printf("%lu %lu %lu",++cnt,++cnt,++cnt);
	return 0;
}

你可能以为是1 2 3,但实际上是3 3 3
我想这是因为++cnt返回的是引用值,所以放入堆栈里的值也是“引用”值,所以输出的三个数都是三次自增运算后的cnt
再来看看这份代码:

#include<cstdio>
#define f_inline inline __attribute__((always_inline))
using namespace std;
using UL=unsigned long;
f_inline func()
{
	static UL x(0);
	return ++x;
}
int main()
{
	register UL x(0);
	++(++x),
	printf("%lu %lu %lu",func(),func(),func());
	return 0;
}

输出是什么?你可能以为是1 2 3,但实际上是3 2 1。因为函数传参时会将参数从后往前放入堆栈空间(原因是堆栈是先进后出的结构),所以后面的函数先执行!
所以:
函数参数谨慎用函数!
函数参数慎用自增和自减运算!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值