[问题] if(X||Y)以及if(a()||b())的差异

楼主: ironstark (Stark)   2020-12-15 02:40:25
不好意思想请问一下各位大大
两个function,a(),b(),回传bool
X=a(),Y=b()
这样 if(X||Y)以及if(a()||b())两种写法在执行上会有什么差异呢?
这部分用到的观念是什么或是该搜寻什么关键字
小弟新手入门对一些细节不太熟悉,还请各位帮忙解惑,谢谢大家!
作者: chuegou (chuegou)   2020-12-15 02:42:00
我好像知道你要问啥第二种写法 b()在a()为true时不会执行 这个吗?
作者: Schottky (顺风相送)   2020-12-15 02:44:00
第二种写法 a() 如果是 true 就直接判定 true不会再去执行 b() 看 b() 是 true 还是 false关键字是 order of evaluation
作者: LPH66 (-6.2598534e+18f)   2020-12-15 02:50:00
不对, 正确的关键字是 short-circuit evaluation虽然是谁先谁后的问题没错, 但关键是因为前件已经肯定结果所以直接"短路"跳掉后件的求值
作者: springman (司布林)   2020-12-15 04:00:00
对 short-circuit 的部份弄清楚就知道了。
作者: CoNsTaR ((const *))   2020-12-15 06:40:00
b 要有 side effect 执行结果才会有差吧否则只是效能问题?
作者: loveme00835 (发箍)   2020-12-15 07:28:00
要看你的 X/Y 是什么型别来决定
作者: dces4212 (flawless)   2020-12-15 22:48:00
差别在b()是否执行这种问题建议直接翻规格书 有权威 不怕错C99 6.5.14有说明只要有一个expression为true即不继续往右evaulate其他expression
作者: kingofsdtw (不能閒下來!!)   2020-12-22 22:05:00
非x86玩玩看,这样写会死人
作者: Killercat (杀人猫™)   2020-12-25 12:45:00
这还有一个别名叫sudden death, 比较少见 XD
作者: Gway (我爱的你 也爱我 好吗?)   2020-12-31 08:17:00
差在fun call 代价 其他的版友说的很齐了

Links booklink

Contact Us: admin [ a t ] ucptt.com