[問題] if ( a && b ) 一定會執行到b嗎?

看板C_and_CPP作者 (autumned)時間12年前 (2011/10/09 10:48), 編輯推噓7(7010)
留言17則, 10人參與, 最新討論串1/4 (看更多)
問題(Question): 我的程式碼裡有一段 是 if ( a && b ) do something; 其中b判斷式 是有可能導致 array index out of bound , 但是 假如 a為true的話 就可以保證b也不會出事 所以我本來以為 如果執行到a = false , b的判斷式就不會被觸發? 還是說這樣寫也是危險寫法呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.98.85

10/09 11:37, , 1F
這是ok的,稱之為 short-circuit evaluation
10/09 11:37, 1F

10/09 11:38, , 2F
&&之前的判斷式只要是false,之後就不會被觸發
10/09 11:38, 2F
不過我還是被觸發了耶 我DEBUG的結果 在這個判斷式這行 b 還是爆炸了.... 後來我改成 if (a) if (b) do something; 這樣就完全沒事了...@_@ ※ 編輯: autumned 來自: 218.166.98.85 (10/09 11:40)

10/09 11:52, , 3F
compiler也有關係吧?
10/09 11:52, 3F

10/09 11:54, , 4F
既然你擔心危險,要安全打從一開始就當他沒有不就好了
10/09 11:54, 4F

10/09 11:55, , 5F
不過我也好奇,short-circuit是標準保證的,還是編譯器
10/09 11:55, 5F

10/09 11:55, , 6F
所做的?
10/09 11:55, 6F

10/09 12:48, , 7F
噢對啊 我好奇的就是如樓上所說
10/09 12:48, 7F

10/09 12:49, , 8F
你也不說說你的環境 XD
10/09 12:49, 8F

10/09 12:50, , 9F
是dev c++ 0_o 我前陣子本來要換codeblocks 或visual
10/09 12:50, 9F

10/09 12:50, , 10F
不過在我發上一篇那之前
10/09 12:50, 10F

10/09 12:51, , 11F
codeblocks跟visual都爆掉了..到現在還是不能用
10/09 12:51, 11F

10/09 13:14, , 12F
我記得這個問題沒標準規範 看編譯器怎麼實作吧
10/09 13:14, 12F

10/09 13:15, , 13F
如要硬性規定判斷式的先後順序就用你後來的寫法吧
10/09 13:15, 13F

10/09 16:58, , 14F
這是編譯問題,有的會執行、有的不會
10/09 16:58, 14F

10/09 16:59, , 15F
當然改成後面那個是比較安全的作法
10/09 16:59, 15F

10/09 17:08, , 16F
標準short-circuit保證,compiler未必從標準.
10/09 17:08, 16F

10/10 02:08, , 17F
看到熟悉的id, world9918大難道是神父學長?
10/10 02:08, 17F
文章代碼(AID): #1EaGjgBs (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EaGjgBs (C_and_CPP)