是 ”!”而不是“== 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)
因为这正是我想要的。
假设我们有一个变量 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)
因为这正是我想要的。