重複の可能性:
未定義、未指定、および実装定義の動作
未定義の動作とシーケンス ポイント
C、C++、Java、および C# におけるインクリメント演算子の前後の動作
私はこのコードスニペットを持っています:
int x = 2;
int y = x + 4 * ++x;
// what is y???
そして、c/c++でコンパイルしてテストすると、次のようになります。
// C/C++
y is 15
しかし、C#経由で取得します
// C#
y is 14
なぜ?
ILの一部は次のとおりです。
locals init ([0] int32 x,
[1] int32 y)
IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: ldc.i4.4
IL_0005: ldloc.0
IL_0006: ldc.i4.1
IL_0007: add
IL_0008: dup
IL_0009: stloc.0
IL_000a: mul
IL_000b: add
IL_000c: stloc.1
IL_000d: ldloca.s y