Возможный дубликат:
Неопределенный, неуказанный и определенный реализацией поведение
Неопределенное поведение и точки последовательности
Поведение оператора приращения до и после в 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