2013-10-16 48 views
-2

我有一个整数称为“计数”,当满足某些条件时递增。所以,我想问问,如果你写这个条件会发生什么:隐式bool评估,如果条件

if(count % 2) 
{ 
    return even_bit; 
} 
else 
{ 
    return odd_bit; 
} 

如果if条件上面检查的条件计%2 = 0或计数%2的问题基本上是问= 0时,你不在整数数据类型变量的表达式中没有明确定义它。

+2

为什么你不能编译和运行代码? –

+3

'0'为'false',任何其他整数值为'true'。 –

+1

你的意思是“哪些条件得到评估”?我只看到一个条件。 – jalf

回答

3

如果一个表达式求值为0,它将被解释为FALSE - 对于任何非零值,它将被解释为TRUE。换句话说,

if(count % 2) 

相当于

if(count % 2 != 0) 

所以,你的代码是 “倒退”。如果陈述是真的,count是奇怪的,你很可能会想要返回odd_bit(只是猜测在这里。)。

+0

当然,这就是你为什么永远不会像他那样写它的原因。如果表达式的类型为'bool',那么它就没问题了(事实上,任何进一步的比较,例如'true'或'false'都会令人困惑)。如果它不是'bool',那么你不会指望有点模糊和混淆的隐式转换,而是编写你想要的转换。 –

+0

@JamesKanze这是一个意见。我通常更喜欢避免不必要的比较,尤其是*当涉及到%操作符时。剩下的就是%运算符的结果。该结果的布尔评估回答了一个问题*是否存在一些余数。 –

+0

@JamesKanze许多C程序员也习惯于其他操作员的常见习语,例如, 'if(flag&MY_FLAG_NAME)'通常比'if(flag&MY_FLAG_NAME == MY_FLAG_NAME)'更适合。 –

0
if(count % 2) 

相当于

if(count % 2 != 0) 

现在,它都将取决于count无论是奇数还是偶数。如果是偶数,则count%2FALSE(返回odd_bit),如果count为奇数,则count%2TRUE(返回even_bit)。

+0

实际上,它相当于if(static_cast (count%2))'。这与'if(count%2!= 0)'实际上是一样的。我不知道你从哪里得到第三个变体。 –

+0

第三个变体不正确,因为_any_非零表达式将计算为true。 –

+0

@JamesKanze;你是对的。 – haccks