我们假设我们有一个变量a:
int a = 0;
可以吗
if(!a)
{
// do some stuff
}
而不是
if(a == 0)
{
// do some stuff
}
?因为它有效。
在第一个例子中,int将变成bool,所以没有static_cast<bool>(a)
可以吗?如果a
大于1,会发生什么?
答案 0 :(得分:5)
在第一个例子中,int将变成bool,所以没有
static_cast<bool>(a)
可以吗?
是的,没关系。会有隐式转换。
如果
a
大于1,会发生什么?
任何非0值都可以隐式转换为true
。相反,只有0值才会被视为false
。
你应该选择哪种方式?要么没事。我想用我的代码表达我的意图。如果我只想在a
等于0时运行if语句,我更喜欢
if (a == 0)
因为它显示了我想要的东西。
答案 1 :(得分:0)
它有效且人们使用它,但我认为这远非良好做法。它给出了关于值的语义的错误想法。
0
通常被视为 falsy ,但这更像是C天的遗物而不是其他任何东西。较新的语言甚至不允许它,因为它误导了代码的读者关于价值的内容。