javascript和cpp中的自增运算符

1. javascript的++与 cpp 的++

今天学习javascript的时候,遇到了一个很有趣的现象,和c++相同的代码,得到的却是截然不同的结果:

  • cpp里
int main{
	int a = 0;
	a = a++
	cout<< a <<endl;
	return 0;
}

结果为1
在这里插入图片描述

  • javascript里
<script>
	var a =0;
	a = a++;
	console.log(a);
</script>

结果为0
在这里插入图片描述
这是为什么呢?想了一下,原因应该这样的:

cpp的解释:

cpp的代码:

输出结果为1的原因,看下面这个就能明白了

int main{
	int a = 0;
	cout << &a << endl; //00BCFDDC
	a = a++;
	cout << &a << endl; //00BCFDDC
	return 0;
}

c++里每个变量都有自己的地址,所以像 a = a这种表达式是没有意义的,不存在高级语言如python, javascript 这种关于变量的深拷贝、浅拷贝之分 (c++是深拷贝、浅拷贝是针对structclass的拷贝构造函数而言的,且c++默认浅拷贝成员变量)。
因此,这里a = a++其实等价于a++,当然了,也等价于a = ++a

但是如果换成:

int main{
	int a = 0;
	b = a++
	cout<< b <<endl;
	return 0;
}

那么此时输出的就是0,因为b 接受的 赋值是a 自增前 的值0,b被赋值后a才自增,这符合 后缀自增运算符 的逻辑,那么输出b,肯定是0啦。

javascript

javascript 是动态类型语言,变量的地址是变化的,因此逻辑变成了:a的值先返回给a(此时a为0),然后a自增,但此时a的地址应该已经变过了,所以a++自然也就不生效了。理解起来就是: 后缀自增运算符在赋值语句里不影响赋值。

<script>
	var a =0;
	a = a++;
	console.log(a);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值