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

时间:2017-05-11 11:05:33

标签: java c# c++ postfix-operator

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 它会增加变量。
  2. 它将旧值分配给变量
  3. 因此变量的值保持不变。你的案例结果将是2。

     i = i++
    

    这与

    相同
       t = i
       i = i + 1
       i = t
    

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

    表达式在Java和C#中从左到右进行评估