作者kobe123 (0.0)
看板C_and_CPP
标题[问题]运算问题
时间Wed Feb 4 00:43:28 2009
int z = -1;
std::cout<<z++ + z<<endl;
std::cout<<z + z++<<endl;
请问上面两个式子有啥不一样??
第一个是先Z+Z再Z=Z+1
所以等於-2
但是第二个是0,可是我推不出来谁可以解说一下
而且两个式子感觉是一样的
0.0
谢谢
我後来检查发现第一个式子输出-2再来z变成0
问题可能出现在这
但是正确的运算优先顺序是??
好困惑= =
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.237.108
※ 编辑: kobe123 来自: 122.116.237.108 (02/04 00:58)
1F:推 firose:undefined behavior 02/04 01:00
2F:→ kobe123:啥意思@@? 02/04 01:01
3F:→ kobe123:Z+Z=-2 , Z=Z+1=-1 为啥变0 02/04 01:02
4F:推 chrisdar:int z = -1; 02/04 01:12
5F:→ chrisdar::cout<<z + z<<endl; 02/04 01:12
6F:→ chrisdar:z++ // 0 02/04 01:12
7F:→ chrisdar::cout<<z + z<<endl; 02/04 01:12
8F:→ chrisdar:z++ // 1 02/04 01:12
9F:推 chrisdar:推坏了 std::cout<<z + z<<endl;z++; 02/04 01:14
10F:→ kobe123:Z++那里要用原来的z来算答案就对了...太粗心了orz||| 02/04 01:21
11F:→ LPH66:正解是一楼 未定义行为 因为你在z++还没结算前又去抓z 02/04 01:36
12F:→ LPH66:这样z++的时间点是随人实作的 02/04 01:36
13F:→ LPH66:(应该说随compiler实作) 02/04 01:36
14F:→ LPH66:参考置底十诫之九 02/04 01:37
15F:→ softwind:万年OP阿 ... 02/04 01:52
16F:→ kobe123:恩恩感谢...忘了看置底0.0 02/04 02:25