2

以下のコードの結果に混乱しています。これらの操作を行うときに、'b' が一見正しくない値を保持するのはなぜですか?

        int a = 0;
        int b = 5;
        a = b++;
        b = b++;            
        Console.WriteLine("For b = b++; b=" + b.ToString()); // b should be 7 but it's 6
        a = 0;
        b = 5;
        a = b--;
        b = b--;            
        Console.WriteLine("For b = b--; b=" + b.ToString()); // b should be 3 but it's 4
        a = 0;
        b = 5;
        a = b + 1;
        b = b + 1;            
        Console.WriteLine("For b = b++; b=" + b.ToString());

出力

          b=6
          b=4
          b=6

C# でのこの動作と、それがどのように機能するかを説明できる人はいますか?

4

4 に答える 4

4

here で詳しく説明されているように、これは確かに後置演算子の動作です。

たとえば、次のように記述します。

b = b++;

次のことが起こります。

  1. の現在の値bが保存され、
  2. b増加し、
  3. の保存された値はb、後置++演算子によって生成されます。
  4. 演算子によって生成された値が に割り当てられbます。

したがって、b実際には元の値が割り当てられ、インクリメントされた値は失われます。

于 2013-10-28T12:28:00.530 に答える
1

値の後に配置された++and--演算子は、値自体に評価され、評価後に値をインクリメント/デクリメントするためです。

そう:

int a = 0;
int b = a++;

このコードを実行すると、bwill equal0awill equalになり1ます。

これは、演算子をプレフィックスとして使用するのとは対照的です。

int a = 0;
int b = ++a;

このコードを実行すると、bwill equal1awill equalになり1ます。

これは文書化された動作であり、長い間使用されてきました。

于 2013-10-28T12:28:13.063 に答える
0

命令 a=b++ はスタックに格納されますが、その後使用されていないため評価されません。

正しい結果を得るには、その行を変更する例からその命令を意味のあるものにします。

Console.WriteLine("For b = b++; b=" + b.ToString());

その人によって:

Console.WriteLine("For a = b++; a=" + a.ToString());
Console.WriteLine("For b = b++; b=" + b.ToString()); //should give 7
于 2013-10-28T12:28:03.537 に答える