Чем объясняется результат следующей операции?
k += c += k += c;
Я пытался понять результат вывода из следующего кода:
int k = 10;
int c = 30;
k += c += k += c;
//k=80 instead of 110
//c=70
и в настоящее время я пытаюсь понять, почему результат для "k" равен 80. Почему назначение k = 40 не работает (на самом деле Visual Studio говорит мне, что это значение не используется в других местах)?
Почему к 80 а не 110?
Если я разделю операцию на:
k+=c;
c+=k;
k+=c;
результат k = 110.
Я пытался просмотреть CIL, но я не настолько глубок в интерпретации сгенерированного CIL и не могу получить несколько деталей:
// [11 13 - 11 24]
IL_0001: ldc.i4.s 10
IL_0003: stloc.0 // k
// [12 13 - 12 24]
IL_0004: ldc.i4.s 30
IL_0006: stloc.1 // c
// [13 13 - 13 30]
IL_0007: ldloc.0 // k expect to be 10
IL_0008: ldloc.1 // c
IL_0009: ldloc.0 // k why do we need the second load?
IL_000a: ldloc.1 // c
IL_000b: add // I expect it to be 40
IL_000c: dup // What for?
IL_000d: stloc.0 // k - expected to be 40
IL_000e: add
IL_000f: dup // I presume the "magic" happens here
IL_0010: stloc.1 // c = 70
IL_0011: add
IL_0012: stloc.0 // k = 80??????