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

作者: blackcatevil (螃蟹)   2015-06-29 16:03:46
最近看到一個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....
有沒有相關的文章和書可以參考的....?
作者: LPH66 (-6.2598534e+18f)   2015-06-29 16:09:00
關鍵字: short circuit evaluation
作者: legendmtg (CLANNAD)   2015-06-29 16:11:00
作者: blackcatevil (螃蟹)   2015-06-29 16:18:00
嗯...因為後來把funtion(n2)擺在&&的第一個參數所以short circuit機制並沒有被啟動 是這樣嗎?至於是不是編譯最佳化 要看compiler有沒有把兩個function編成獨立的machine code, 是這樣嗎?
作者: azureblaze (AzureBlaze)   2015-06-29 16:25:00
不是,&&本來就是這樣運作的只要&&前面是false,後面不管是什麼都不做了||前面是true也一樣
作者: blackcatevil (螃蟹)   2015-06-29 16:27:00
所以short circuit不是什麼特別機制,是一個基本就像在程式中寫1+1就會等於2的基本概念@@
作者: gofigure (平行世界)   2015-07-04 10:26:00
這種寫法在shell script常看到 c老實說還好
作者: bibo9901 (function(){})()   2015-07-04 20:42:00
if( idx < length && arr[idx] ... ) 這很多吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com