看板 C_and_CPP 關於我們 聯絡資訊
最近看到一個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
LPH66: 關鍵字: short circuit evaluation 06/29 16:09
legendmtg: short circuit http://tinyurl.com/d4v4fov 06/29 16:11
blackcatevil: 嗯...因為後來把funtion(n2)擺在&&的第一個參數 06/29 16:18
blackcatevil: 所以short circuit機制並沒有被啟動 是這樣嗎? 06/29 16:19
blackcatevil: 至於是不是編譯最佳化 要看compiler有沒有把兩個 06/29 16:22
blackcatevil: function編成獨立的machine code, 是這樣嗎? 06/29 16:22
azureblaze: 不是,&&本來就是這樣運作的 06/29 16:25
azureblaze: 只要&&前面是false,後面不管是什麼都不做了 06/29 16:25
azureblaze: ||前面是true也一樣 06/29 16:25
blackcatevil: 所以short circuit不是什麼特別機制,是一個基本 06/29 16:27
blackcatevil: 就像在程式中寫1+1就會等於2的基本概念@@ 06/29 16:28
gofigure: 這種寫法在shell script常看到 c老實說還好 07/04 10:26
bibo9901: if( idx < length && arr[idx] ... ) 這很多吧? 07/04 20:42