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

Roc*_*cky 5 c++

我遇到了一行代码:

int a = 10;
int b = 40;
a = a + b - (b = a);
cout << a << "   " << b << endl;
Run Code Online (Sandbox Code Playgroud)

我无法理解这段代码会发生什么.有人能为我解释一下吗?

Arm*_*yan 11

未定义的行为.b改变的值用于计算而没有插入序列点.该程序的结果是不可预测的 - 它可以打印任何东西或崩溃,或做一些讨厌的系统调用.

除非另有说明,否则单个运算符的操作数和单个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.5)在前一个和下一个序列点之间,标量对象应该修改其存储值最多一次通过表达式的评价.此外,只能访问先前值以确定要存储的值.对于完整表达式的子表达式的每个允许排序,应满足本段的要求; 否则行为未定义.