作者ironstark (Stark)
看板C_and_CPP
标题[问题] if(X||Y)以及if(a()||b())的差异
时间Tue Dec 15 02:40:25 2020
不好意思想请问一下各位大大
两个function,a(),b(),回传bool
X=a(),Y=b()
这样 if(X||Y)以及if(a()||b())两种写法在执行上会有什麽差异呢?
这部分用到的观念是什麽或是该搜寻什麽关键字
小弟新手入门对一些细节不太熟悉,还请各位帮忙解惑,谢谢大家!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.188.192 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1607971227.A.366.html
1F:推 chuegou: 我好像知道你要问啥 12/15 02:42
2F:→ chuegou: 第二种写法 b()在a()为true时不会执行 这个吗? 12/15 02:42
3F:推 Schottky: 第二种写法 a() 如果是 true 就直接判定 true 12/15 02:44
4F:→ Schottky: 不会再去执行 b() 看 b() 是 true 还是 false 12/15 02:44
5F:→ Schottky: 关键字是 order of evaluation 12/15 02:47
6F:推 LPH66: 不对, 正确的关键字是 short-circuit evaluation 12/15 02:50
7F:→ LPH66: 虽然是谁先谁後的问题没错, 但关键是因为前件已经肯定结果 12/15 02:50
8F:→ LPH66: 所以直接"短路"跳掉後件的求值 12/15 02:51
9F:→ springman: 对 short-circuit 的部份弄清楚就知道了。 12/15 04:00
10F:推 CoNsTaR: b 要有 side effect 执行结果才会有差吧 12/15 06:40
11F:→ CoNsTaR: 否则只是效能问题? 12/15 06:41
12F:→ loveme00835: 要看你的 X/Y 是什麽型别来决定 12/15 07:28
13F:推 dces4212: 差别在b()是否执行 12/15 22:48
14F:推 dces4212: 这种问题建议直接翻规格书 有权威 不怕错 12/16 00:01
15F:→ dces4212: C99 6.5.14有说明只要有一个expression为true 12/16 00:02
16F:→ dces4212: 即不继续往右evaulate其他expression 12/16 00:02
17F:推 kingofsdtw: 非x86玩玩看,这样写会死人 12/22 22:05
18F:→ Killercat: 这还有一个别名叫sudden death, 比较少见 XD 12/25 12:45
19F:推 Gway: 差在fun call 代价 其他的版友说的很齐了 12/31 08:17