最佳答案
以下操作的结果如何解释?
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不起作用(实际上 VisualStudio 告诉我这个值没有在其他地方使用) ?
为什么是 k 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??????