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