同一表达式中变量的赋值和使用

Variable assignment and usage in the same expression

本文关键字:赋值 变量 表达式      更新时间:2023-10-16

我遇到一行代码:

int a = 10;
int b = 40;
a = a + b - (b = a);
cout << a << "   " << b << endl;

我不明白这段代码中发生了什么。有人能给我解释一下吗?

未定义行为b的值改为,用于计算,没有中间序列点。程序的结果是不可预测的——它可以打印任何东西或崩溃,或者做一些讨厌的系统调用。

除特别说明外,单个操作数的求值顺序单个表达式的操作符和子表达式,以及顺序在哪种药物中会产生副作用,目前还不清楚一个标量对象的前一个和下一个序列点应该有其存储由表达式求值最多修改一次的值。而且,访问先验值只能是为了确定要存储的值。应满足本款的要求的子表达式的每个允许排序的表情;否则行为为undefined

未定义行为

http://en.wikipedia.org/wiki/Sequence_point

这是未定义的行为,因为变量b已被修改,然后在同一表达式中使用,因此最终结果是不明确的,因为它取决于表达式求值的顺序。(b=a)可以在b变量计算a+b之前或之后发生