[問題] 似乎是編譯最佳化?

看板C_and_CPP (C/C++)作者 (螃蟹)時間10年前 (2015/06/29 16:03), 編輯推噓3(3010)
留言13則, 6人參與, 最新討論串1/1
最近看到一個code大致是這樣寫的 bool ret; bool function(int n) { if(n >= 0) return true; return false; } int main() { cin >> n1; ret = function(n1) cin >> n2; ret = ret && function(n2) return 0; } 發現說只要function(n1)回傳false, function(n2)連進去都不會進去 反之只要function(n2)回傳true, function(n2)才會被執行 只要把ret = ret && function(n2)寫成 ret = function(n2) && ret就不會有這個問題 第一個反應是覺得是編譯最佳化... 因為第一個ret如果是false那function(n2)在&&下就是冗員 但是也不太敢確定, 這部分都還給老師了XD.... 有沒有相關的文章和書可以參考的....? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.234.125.42 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435565033.A.2BF.html

06/29 16:09, , 1F
關鍵字: short circuit evaluation
06/29 16:09, 1F

06/29 16:11, , 2F
06/29 16:11, 2F

06/29 16:18, , 3F
嗯...因為後來把funtion(n2)擺在&&的第一個參數
06/29 16:18, 3F

06/29 16:19, , 4F
所以short circuit機制並沒有被啟動 是這樣嗎?
06/29 16:19, 4F

06/29 16:22, , 5F
至於是不是編譯最佳化 要看compiler有沒有把兩個
06/29 16:22, 5F

06/29 16:22, , 6F
function編成獨立的machine code, 是這樣嗎?
06/29 16:22, 6F

06/29 16:25, , 7F
不是,&&本來就是這樣運作的
06/29 16:25, 7F

06/29 16:25, , 8F
只要&&前面是false,後面不管是什麼都不做了
06/29 16:25, 8F

06/29 16:25, , 9F
||前面是true也一樣
06/29 16:25, 9F

06/29 16:27, , 10F
所以short circuit不是什麼特別機制,是一個基本
06/29 16:27, 10F

06/29 16:28, , 11F
就像在程式中寫1+1就會等於2的基本概念@@
06/29 16:28, 11F

07/04 10:26, , 12F
這種寫法在shell script常看到 c老實說還好
07/04 10:26, 12F

07/04 20:42, , 13F
if( idx < length && arr[idx] ... ) 這很多吧?
07/04 20:42, 13F
文章代碼(AID): #1LaFlfA_ (C_and_CPP)
文章代碼(AID): #1LaFlfA_ (C_and_CPP)