[问题] 似乎是编译最佳化?

楼主: 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