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

看板C_and_CPP作者 (Stark)時間3年前 (2020/12/15 02:40), 編輯推噓6(6010)
留言16則, 7人參與, 3年前最新討論串1/2 (看更多)
不好意思想請問一下各位大大 兩個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

12/15 02:42, 3年前 , 1F
我好像知道你要問啥
12/15 02:42, 1F

12/15 02:42, 3年前 , 2F
第二種寫法 b()在a()為true時不會執行 這個嗎?
12/15 02:42, 2F

12/15 02:44, 3年前 , 3F
第二種寫法 a() 如果是 true 就直接判定 true
12/15 02:44, 3F

12/15 02:44, 3年前 , 4F
不會再去執行 b() 看 b() 是 true 還是 false
12/15 02:44, 4F

12/15 02:47, 3年前 , 5F
關鍵字是 order of evaluation
12/15 02:47, 5F

12/15 02:50, 3年前 , 6F
不對, 正確的關鍵字是 short-circuit evaluation
12/15 02:50, 6F

12/15 02:50, 3年前 , 7F
雖然是誰先誰後的問題沒錯, 但關鍵是因為前件已經肯定結果
12/15 02:50, 7F

12/15 02:51, 3年前 , 8F
所以直接"短路"跳掉後件的求值
12/15 02:51, 8F

12/15 04:00, 3年前 , 9F
對 short-circuit 的部份弄清楚就知道了。
12/15 04:00, 9F

12/15 06:40, 3年前 , 10F
b 要有 side effect 執行結果才會有差吧
12/15 06:40, 10F

12/15 06:41, 3年前 , 11F
否則只是效能問題?
12/15 06:41, 11F

12/15 07:28, 3年前 , 12F
要看你的 X/Y 是什麼型別來決定
12/15 07:28, 12F

12/15 22:48, 3年前 , 13F
差別在b()是否執行
12/15 22:48, 13F

12/16 00:01, 3年前 , 14F
這種問題建議直接翻規格書 有權威 不怕錯
12/16 00:01, 14F

12/16 00:02, 3年前 , 15F
C99 6.5.14有說明只要有一個expression為true
12/16 00:02, 15F

12/16 00:02, 3年前 , 16F
即不繼續往右evaulate其他expression
12/16 00:02, 16F
文章代碼(AID): #1Vrx6RDc (C_and_CPP)
文章代碼(AID): #1Vrx6RDc (C_and_CPP)