[問題] if(X||Y)以及if(a()||b())的差異

作者: ironstark (Stark)   2020-12-15 02:40:25
不好意思想請問一下各位大大
兩個function,a(),b(),回傳bool
X=a(),Y=b()
這樣 if(X||Y)以及if(a()||b())兩種寫法在執行上會有什麼差異呢?
這部分用到的觀念是什麼或是該搜尋什麼關鍵字
小弟新手入門對一些細節不太熟悉,還請各位幫忙解惑,謝謝大家!
作者: chuegou (chuegou)   2020-12-15 02:42:00
我好像知道你要問啥第二種寫法 b()在a()為true時不會執行 這個嗎?
作者: Schottky (順風相送)   2020-12-15 02:44:00
第二種寫法 a() 如果是 true 就直接判定 true不會再去執行 b() 看 b() 是 true 還是 false關鍵字是 order of evaluation
作者: LPH66 (-6.2598534e+18f)   2020-12-15 02:50:00
不對, 正確的關鍵字是 short-circuit evaluation雖然是誰先誰後的問題沒錯, 但關鍵是因為前件已經肯定結果所以直接"短路"跳掉後件的求值
作者: springman (司布林)   2020-12-15 04:00:00
對 short-circuit 的部份弄清楚就知道了。
作者: CoNsTaR ((const *))   2020-12-15 06:40:00
b 要有 side effect 執行結果才會有差吧否則只是效能問題?
作者: loveme00835 (髮箍)   2020-12-15 07:28:00
要看你的 X/Y 是什麼型別來決定
作者: dces4212 (flawless)   2020-12-15 22:48:00
差別在b()是否執行這種問題建議直接翻規格書 有權威 不怕錯C99 6.5.14有說明只要有一個expression為true即不繼續往右evaulate其他expression
作者: kingofsdtw (不能閒下來!!)   2020-12-22 22:05:00
非x86玩玩看,這樣寫會死人
作者: Killercat (殺人貓™)   2020-12-25 12:45:00
這還有一個別名叫sudden death, 比較少見 XD
作者: Gway (我愛的你 也愛我 好嗎?)   2020-12-31 08:17:00
差在fun call 代價 其他的版友說的很齊了

Links booklink

Contact Us: admin [ a t ] ucptt.com