看板 C_and_CPP 關於我們 聯絡資訊
不好意思想請問一下各位大大 兩個function,a(),b(),回傳bool X=a(),Y=b() 這樣 if(X||Y)以及if(a()||b())兩種寫法在執行上會有什麼差異呢? 這部分用到的觀念是什麼或是該搜尋什麼關鍵字 小弟新手入門對一些細節不太熟悉,還請各位幫忙解惑,謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.188.192 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1607971227.A.366.html
chuegou: 我好像知道你要問啥 12/15 02:42
chuegou: 第二種寫法 b()在a()為true時不會執行 這個嗎? 12/15 02:42
Schottky: 第二種寫法 a() 如果是 true 就直接判定 true 12/15 02:44
Schottky: 不會再去執行 b() 看 b() 是 true 還是 false 12/15 02:44
Schottky: 關鍵字是 order of evaluation 12/15 02:47
LPH66: 不對, 正確的關鍵字是 short-circuit evaluation 12/15 02:50
LPH66: 雖然是誰先誰後的問題沒錯, 但關鍵是因為前件已經肯定結果 12/15 02:50
LPH66: 所以直接"短路"跳掉後件的求值 12/15 02:51
springman: 對 short-circuit 的部份弄清楚就知道了。 12/15 04:00
CoNsTaR: b 要有 side effect 執行結果才會有差吧 12/15 06:40
CoNsTaR: 否則只是效能問題? 12/15 06:41
loveme00835: 要看你的 X/Y 是什麼型別來決定 12/15 07:28
dces4212: 差別在b()是否執行 12/15 22:48
dces4212: 這種問題建議直接翻規格書 有權威 不怕錯 12/16 00:01
dces4212: C99 6.5.14有說明只要有一個expression為true 12/16 00:02
dces4212: 即不繼續往右evaulate其他expression 12/16 00:02
kingofsdtw: 非x86玩玩看,這樣寫會死人 12/22 22:05
Killercat: 這還有一個別名叫sudden death, 比較少見 XD 12/25 12:45
Gway: 差在fun call 代價 其他的版友說的很齊了 12/31 08:17