后缀自赋值行为在 C#/Java 中是否严格定义

Is postfix self assignment behaviour strictly defined in C#/Java?

本文关键字:Java 是否 定义 赋值 后缀      更新时间:2023-10-16

我知道以下代码已知会在 C/C++ 中产生未定义的行为

   int i = 1;
   i = 2*i++;
   cout << i << endl; // surprisingly 3, undefined...

它在 Java/C# 中生成预期结果 2。但这在 Java/C# 中是保证还是仍然未定义的行为?

在 C# 中,这是非常明确的定义。

  1. 它递增变量。
  2. 它将旧值分配给变量

因此,变量的值保持不变。结果将是 2 与您的案例在这里。

 i = i++

这与

   t = i
   i = i + 1
   i = t

当这种表达作为复合语句的一部分时,它会变得非常混乱。从长远来看,保持表达简单,减少自己和他人的困惑是非常明智的。

表达式在 Java 和 C# 中从左到右计算