精華區beta Programming 關於我們 聯絡資訊
※ 引述《avhacker (我想把整片天空打開)》之銘言: : 現在重來一次,x 初值是 12,然後你寫 : x = x++; cout << x; : 那麼該會輸出多少? 問題就出在 x = x++ 這行,哪部分會先被執行,在 : C++ SPEC 是沒有定義的. ...對於最後一句描述覺得無言以對. (不是不屑,而是無奈) 規格書那麼大一本,無論我想看postfix expressions或是assignment operators, 都有明確的章節. 但是,我稍微仔細掃視目錄,都找不到哪一段可能提到這些很重要的未定義項目耶. 說真的,既然是規格書沒定義的,為什麼你能夠講得出來? 要能夠講得出來,應該是整本C++規格書748頁數(ISO/IEC 14882)全都看完了, 內容前後貫通,完全了解其能力,交互效果以及沒提到, 才能夠講出 "沒定義" 這個詞吧? 我另一個疑問點是, = ++(前置) ++(後綴) + 四個符號有明確的結合順序吧? 那麼,為什麼 x = x++ 無法具體說出哪部份先執行,甚至是 "SPEC沒有定義它"? 即使如此,在debug時切換去看組合語言的內容,它所做的事不都講得很清楚嗎? (當然,我的意思不是用實作當證據. 規格是基準,是開端.) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.70.115
poga:他是說 x=x++; cout << x; 這兩個哪個先算 61.225.18.200 02/22 03:39
poga:不一定吧 61.225.18.200 02/22 03:40
Tiberius:仔細讀一遍 #2096 我貼的那段就知道了 59.126.44.151 02/22 03:44
Tiberius:重點在於運算式內「變數只能改變一次」 59.126.44.151 02/22 03:51
coldstars:原po是不是沒爬完...|| 59.115.98.186 02/22 03:52
UNARYvvv:並不是規格書整本看完沒看到才叫沒定義220.132.114.113 02/22 04:09
UNARYvvv:而是規格中有寫 undefined/unspecfied/..220.132.114.113 02/22 04:10
UNARYvvv:那些部份意思就是留給實作廠商的空間了220.132.114.113 02/22 04:10
UNARYvvv:(上面打錯字,是 "unspecified" 才對)220.132.114.113 02/22 04:11
UNARYvvv:另外提到組合語言,各指令說明了一切沒錯220.132.114.113 02/22 04:12
UNARYvvv:但會有那些組合語言就已經是特定廠商編譯220.132.114.113 02/22 04:12
UNARYvvv:器將 src 編譯之後的結果了,也就是那時看220.132.114.113 02/22 04:13
UNARYvvv:見的已是被"implementation"給"defined"220.132.114.113 02/22 04:14
UNARYvvv:了.220.132.114.113 02/22 04:14
ephesians:拜託,不要沒事就講沒爬完沒爬完...218.160.112.104 02/22 10:06
ephesians:明明每篇文都一路讀下來,結果讓你針對218.160.112.104 02/22 10:06
ephesians:人身做討論,太無聊了吧218.160.112.104 02/22 10:07
ephesians:前面的文才幾篇啊?最好是誰都沒爬完!218.160.112.104 02/22 10:11
ephesians:1F,他應該只談x=x++這句而已,嗯,還在想218.160.112.104 02/22 10:17
ephesians:我疑問是,x++若可以比=先算,那結合順序218.160.112.104 02/22 10:21
ephesians:是定義心酸的嗎?218.160.112.104 02/22 10:22
coldstars:你只是回你樓上那位的話,就是我誤會了 59.115.98.186 02/22 13:10
coldstars:如果你是回這串第一篇,那... 59.115.98.186 02/22 13:11
coldstars:有人都已經把規格書貼出來了... 59.115.98.186 02/22 13:13
coldstars:而且x=x++也賦值兩次,也是未定義 59.115.98.186 02/22 13:44
ephesians:x=x++是賦值二次沒錯,但這個例子... 218.160.108.66 02/22 17:11
ephesians:答案很混淆嗎? 218.160.108.66 02/22 17:12
UNARYvvv:c 大,不可能是回我,因為我沒提到爬文 :)220.132.114.113 02/22 18:11
UNARYvvv:e 大,既然你認同 "x=x++" 是賦值兩次220.132.114.113 02/22 18:14
UNARYvvv:本例則是 "x=x++ + ++x;" 那麼結果應該可220.132.114.113 02/22 18:14
UNARYvvv:接受此結果亦取決於"實作定義"吧?220.132.114.113 02/22 18:17
UNARYvvv:嗯..講清楚一點就是,二元運算子的結合性220.132.114.113 02/22 18:30
UNARYvvv:未必代表 "左右兩邊各自" 的運算順序220.132.114.113 02/22 18:31
UNARYvvv:某些運算子有遵守,如 && ||220.132.114.113 02/22 18:32
UNARYvvv:但 + - 這種就沒有220.132.114.113 02/22 18:33
UNARYvvv:因此 (x++)+(++x) , 到底先 (x++) 還是先220.132.114.113 02/22 18:33
UNARYvvv:(++x) 是看編譯器怎麼實作220.132.114.113 02/22 18:33
UNARYvvv:所以才會稱這樣的寫法要避免..220.132.114.113 02/22 18:34