我知道以下代码已知会在 C/C++ 中产生未定义的行为
int i = 1;
i = 2*i++;
cout << i << endl; // surprisingly 3, undefined...
它在 Java/C# 中生成预期结果 2。但这是 Java/C# 中的保证还是未定义的行为?
最佳答案
在 C# 中,这是非常明确的定义。
- 它递增变量。
- 它将旧值赋给变量
所以变量的值保持不变。对于您的案例,结果将为 2。
i = i++
这是一样的
t = i
i = i + 1
i = t
这种表达式作为复合语句的一部分时会变得非常困惑。从长远来看,保持表达式简单,减少自己和他人的混淆是非常明智的。
Java 和 C# 中的表达式都是从左到右求值的
关于java - 后缀自赋值行为是否在 C#/Java 中严格定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913593/