a++和a--混合使用运算法则

遇到a++和a--混合使用的时候,总是与结果对应不上

int a=2,b;    
b=(++a)+(a--)-(++a)+(a--);
cout<<a<<" "<<b;

img

运算过程我是这样计算的,大家能帮忙看看么
先算++a:b = 3 + (a--)- (++a)+ (a--); a的值为3;
再算a--: b = 3 + 3 - (++a) + (a--); a的值为2;
再算++a: b = 3 + 3 - 3 +(a--); a的值为3;
最后算a--: b = 3 + 3 - 3 + 3 ; a的值最终为2;
b的计算结果最终应该为 6的,怎么输出显示的是 5 ,不太明白。

中途换了好多数据,例如下面程序与截图显示的效果

img

img

img

这个运算过程具体该怎么办呢?

我这里运行了是2 6,第一种是对的,可能是编译器“优化”出问题了。换个环境应该会正常比如devc++换codeblocks等。
也可以试试看汇编g++ code.cpp -S -o code.s
加上 -S 查看汇编,也可以再加上-O2或-O3优化汇编,
看看这几个汇编文件里是怎么算的
比如我这里(这是手机的

 行号  汇编语言
   18   mov w8, #2
  19     str w8, [sp, #8]
  20     ldr w8, [sp, #8]
  21     add w8, w8, #1
  22     str w8, [sp, #8]
  23     ldr w9, [sp, #8]
  24     subs    w10, w9, #1
  25     str w10, [sp, #8]
  26     add w8, w8, w9                                                                                     27     ldr w9, [sp, #8]
  28     add w9, w9, #1                                                                                     29     str w9, [sp, #8]
  30     subs    w8, w8, w9
  31     ldr w9, [sp, #8]
  32     subs    w10, w9, #1                                                                                33     str w10, [sp, #8]
  34     add w8, w8, w9                                                                                     35     str w8, [sp, #4]

用到了三个寄存器w8,w9,w10,sp+#4存b,sp+#8存a

img


计算完后,把sp+#8和sp+#4依次输出就是a,b了
2 6

前几步都对 最后一步加了()了 应该是 b = 3 + 3 - 3 + 2=5


可以查看手册:c++-三/五/零法则 中的内容

你用的什么IDE环境,感觉和编辑器有关,我在mac上用的clang,结果是6
你的推理是正确的

++a的值为原来的a+1
--a的值为原来的a-1
a++和a--的值都是原来的a
上述操作中,a的新值总是会变化的。