是"!" intsead" == 0"检查int是0是一个好习惯吗?

时间:2016-05-05 12:49:38

标签: c++ type-conversion implicit-conversion

我们假设我们有一个变量a:

int a = 0;

可以吗

if(!a)
{
    // do some stuff
}

而不是

if(a == 0)
{
    // do some stuff
}

?因为它有效。

在第一个例子中,int将变成bool,所以没有static_cast<bool>(a)可以吗?如果a大于1,会发生什么?

2 个答案:

答案 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天的遗物而不是其他任何东西。较新的语言甚至不允许它,因为它误导了代码的读者关于价值的内容。