我知道以下代码已知会在C / C ++中产生未定义的行为
int i = 1;
i = 2*i++;
cout << i << endl; // surprisingly 3, undefined...
它在Java / C#中产生2的预期结果。但这是Java / C#中的保证还是尚未定义的行为?
答案 0 :(得分:1)
在C#中,这是非常明确的。
因此变量的值保持不变。你的案例结果将是2。
i = i++
这与
相同 t = i
i = i + 1
i = t
当这种表达作为复合语句的一部分时会变得非常混乱。从长远来看,保持表达简单,不要让自己和他人混淆是非常明智的。
表达式在Java和C#中从左到右进行评估