我有一个整数称为“计数”,当满足某些条件时递增。所以,我想问问,如果你写这个条件会发生什么:隐式bool评估,如果条件
if(count % 2)
{
return even_bit;
}
else
{
return odd_bit;
}
如果if条件上面检查的条件计%2 = 0或计数%2的问题基本上是问= 0时,你不在整数数据类型变量的表达式中没有明确定义它。
我有一个整数称为“计数”,当满足某些条件时递增。所以,我想问问,如果你写这个条件会发生什么:隐式bool评估,如果条件
if(count % 2)
{
return even_bit;
}
else
{
return odd_bit;
}
如果if条件上面检查的条件计%2 = 0或计数%2的问题基本上是问= 0时,你不在整数数据类型变量的表达式中没有明确定义它。
如果一个表达式求值为0
,它将被解释为FALSE
- 对于任何非零值,它将被解释为TRUE
。换句话说,
if(count % 2)
相当于
if(count % 2 != 0)
所以,你的代码是 “倒退”。如果陈述是真的,count
是奇怪的,你很可能会想要返回odd_bit
(只是猜测在这里。)。
当然,这就是你为什么永远不会像他那样写它的原因。如果表达式的类型为'bool',那么它就没问题了(事实上,任何进一步的比较,例如'true'或'false'都会令人困惑)。如果它不是'bool',那么你不会指望有点模糊和混淆的隐式转换,而是编写你想要的转换。 –
@JamesKanze这是一个意见。我通常更喜欢避免不必要的比较,尤其是*当涉及到%操作符时。剩下的就是%运算符的结果。该结果的布尔评估回答了一个问题*是否存在一些余数。 –
@JamesKanze许多C程序员也习惯于其他操作员的常见习语,例如, 'if(flag&MY_FLAG_NAME)'通常比'if(flag&MY_FLAG_NAME == MY_FLAG_NAME)'更适合。 –
if(count % 2)
相当于
if(count % 2 != 0)
现在,它都将取决于count
无论是奇数还是偶数。如果是偶数,则count%2
为FALSE
(返回odd_bit
),如果count
为奇数,则count%2
为TRUE
(返回even_bit
)。
实际上,它相当于if(static_cast
第三个变体不正确,因为_any_非零表达式将计算为true。 –
@JamesKanze;你是对的。 – haccks
为什么你不能编译和运行代码? –
'0'为'false',任何其他整数值为'true'。 –
你的意思是“哪些条件得到评估”?我只看到一个条件。 – jalf