我遇到了一行代码:
int a = 10;
int b = 40;
a = a + b - (b = a);
cout << a << " " << b << endl;
我无法理解此代码中会发生什么。 有人可以帮我解释一下吗?
答案 0 :(得分:11)
Undefined behavior。 b
的值更改 和 用于计算而没有插入序列点。该程序的结果是不可预测的 - 它可以打印任何东西或崩溃,或做一些讨厌的系统调用。
除非另有说明,否则评估个人操作数的顺序 单个表达式的运算符和子表达式以及顺序 在哪些副作用发生,是未指明.53)之间 上一个和下一个序列点标量对象应该存储它 通过表达式的评估,最多修改一次值。 此外,只能访问先前值以确定 要存储的值。应满足本款的要求 对于每个允许的完整子表达式的排序 表达;否则行为 未定义 。
答案 1 :(得分:1)
答案 2 :(得分:0)
这是未定义的行为,因为可修改的b已经被修改,然后在同一个表达式中使用,因此最终结果是不明确的,因为它取决于表达式求值的顺序。
(b=a)
可以在b vairable用于计算a+b
之前或之后发生。