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

时间:2011-07-22 08:43:58

标签: c++

我遇到了一行代码:

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

我无法理解此代码中会发生什么。 有人可以帮我解释一下吗?

3 个答案:

答案 0 :(得分:11)

Undefined behaviorb的值更改 用于计算而没有插入序列点。该程序的结果是不可预测的 - 它可以打印任何东西或崩溃,或做一些讨厌的系统调用。

  

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

答案 1 :(得分:1)

答案 2 :(得分:0)

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