作者m8403051 (大吉岭红茶)
看板C_and_CPP
标题[问题] cpp 考题请教
时间Mon Apr 20 09:37:40 2020
开发平台(Platform): Linux CentOS 7
编译器: gcc version 4.4.7 20120313 (Red Hat 4.4.7-23)
预期的正确结果(Expected Output):180
错误结果(Wrong Output):215
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/e.js/nn576o
#include <iostream>
using namespace std;
int main() {
int a=6, b=7;
a *= a-- * --b;
cout << a << endl;
return 0;
}
补充说明(Supplement):
使用 ideone.com 跑出来是正确的结果 180, 但是使用 CentOS 7 g++ 跑出来却是 215
请教各位先进这是哪边没注意到?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.10.20.6 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1587346663.A.647.html
1F:推 jerryh001: 同一行不能修改a两次以上 会UB 04/20 09:41
2F:→ m8403051: 所以这样的写法是不好的写法吗? 04/20 11:53
3F:→ m8403051: 另外, g++ 有可能修改设定修正吗? 04/20 11:53
4F:→ james732: 实务上遇到有人这麽写我会揍他 XD 04/20 12:02
5F:→ m8403051: 了解了, 搜索到一些 undefined behavior 的资讯, 谢谢 04/20 12:19
6F:推 mmmmei: 十三戒第八条 04/20 12:57
7F:→ sarafciel: 都2020了还有人在出这种题目 鱼骨题真是祸害遗千年 04/20 14:53
8F:→ kobe8112: 工作这样写不会被干飞吗QQ 04/20 16:48
9F:推 ucrxzero: 要看编译器怎麽写int乘法 04/20 19:08
10F:→ loveme00835: xD 04/20 19:51
11F:→ loveme00835: 想说怎麽会是 UB, 还没看到解答 04/20 20:09
12F:→ loveme00835: 语言也是会演进的, 所以答案也不会一成不变 04/20 20:11
13F:推 oToToT: 在C++17下这样还是UB吗 04/20 20:56
14F:→ sarafciel: 原PO提的编译器是gcc4.4.7 所以应该用c++0x的标准(逃) 04/20 21:23
15F:→ freef1y3: a*=和a--之间并没有sequence point隔开,所以计算顺序没 04/22 12:45
16F:→ freef1y3: 有规定 04/22 12:45
17F:→ freef1y3: 发现下面有人回了XDD 04/23 00:14