[問題] cpp 考題請教

作者: m8403051 (大吉嶺紅茶)   2020-04-20 09:37:40
開發平台(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
作者: jerryh001   2020-04-20 09:41:00
同一行不能修改a兩次以上 會UB
作者: m8403051 (大吉嶺紅茶)   2020-04-20 11:53:00
所以這樣的寫法是不好的寫法嗎?另外, g++ 有可能修改設定修正嗎?
作者: james732 (好人超)   2020-04-20 12:02:00
實務上遇到有人這麼寫我會揍他 XD
作者: m8403051 (大吉嶺紅茶)   2020-04-20 12:19:00
了解了, 搜索到一些 undefined behavior 的資訊, 謝謝
作者: mmmmei (mmm煤)   2020-04-20 12:57:00
十三戒第八條
作者: sarafciel (Cattuz)   2020-04-20 14:53:00
都2020了還有人在出這種題目 魚骨題真是禍害遺千年
作者: kobe8112 (小B)   2020-04-20 16:48:00
工作這樣寫不會被幹飛嗎QQ
作者: ucrxzero (RX-0)   2020-04-20 19:08:00
要看編譯器怎麼寫int乘法
作者: loveme00835 (髮箍)   2020-04-20 19:51:00
xD想說怎麼會是 UB, 還沒看到解答語言也是會演進的, 所以答案也不會一成不變
作者: oToToT (屁孩)   2020-04-20 20:56:00
在C++17下這樣還是UB嗎
作者: sarafciel (Cattuz)   2020-04-20 21:23:00
原PO提的編譯器是gcc4.4.7 所以應該用c++0x的標準(逃)
作者: freef1y3 ( )   2020-04-22 12:45:00
a*=和a--之間並没有sequence point隔開,所以計算順序没有規定

Links booklink

Contact Us: admin [ a t ] ucptt.com