【发布时间】:2016-03-10 09:26:10
【问题描述】:
很多时候我看到(有时写)类似于这个例子的代码:
int a=0, b=2;
if( a && (b=func())!=0 ) {
//...
问题是:标准是否保证这些陈述?
-
b将不会被触及(并保持价值2) -
func()不会被调用
反之亦然,如果我们写if( func()!=0 && a ) - 是否会调用标准保证func()?
我对定义这是合法的特定标准段落感兴趣。
UPD:我的错字,从 int a=1 更改为 int a=0
【问题讨论】:
-
在这种情况下 func 将被保证调用,因为 a = 1
-
为什么a为1时
a && (b=func())!=0会短路? -
还要注意你不应该这样写代码;保持简单和“愚蠢”。
-
对我来说,如果条件是
a ||(b=func()) != 0,这个问题会更有意义,因为这实际上是短路评估的情况。 -
我会说它比 @AugustKarlstrom 强一点 - 这确实是非常糟糕的代码,作者应该被解雇或给予'-F'等级。
标签: c++ c language-lawyer