是 ”!”而不是“== 0”来检查 int 是否为 0 好习惯?

Is "!" intsead of "== 0" to check if int is 0 good practice?

假设我们有一个变量 a:

int a = 0;

可以做吗

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

而不是

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

?因为它有效。

在第一个示例中,int 将被转换为 bool,那么可以不使用 static_cast<bool>(a) 吗?另外如果 a 大于 1 会发生什么?

它是有效的并且人们在使用它,但我认为它远非好的做法。它给出了关于值语义的错误想法。

0 通常被视为 falsy,但这更像是 C 时代的遗物。较新的语言甚至不允许它,因为它会误导代码读者关于值是什么。

In the first example the int will be turned into a bool, so is it okay to do it without static_cast<bool>(a)?

是的,没关系。会有隐式转换。

Also what will happen if a is bigger than 1?

任何非 0 值都可以隐式转换为 true。相反,只有值 0 将被视为 false.

你应该选择哪种方式?两者都可以。我喜欢用我的代码表达我的意图。如果我只希望 if 语句在 a 等于 0 时 运行 我更喜欢

if (a == 0)

因为这正是我想要的。