C++ “是”吗&引用;intsead of";==0“;检查int是否为0良好做法?
假设我们有一个变量a:C++ “是”吗&引用;intsead of";==0“;检查int是否为0良好做法?,c++,type-conversion,implicit-conversion,C++,Type Conversion,Implicit Conversion,假设我们有一个变量a: int a = 0; 可以吗 if(!a) { // do some stuff } 而不是 if(a == 0) { // do some stuff } ??因为它有效 在第一个示例中,int将被转换为bool,因此不使用static\u cast(a)可以吗?如果 < 大于1,会发生什么? 它是有效的,人们使用它,但我认为这远不是好的实践。它给出了关于值的语义的错误想法 0通常被认为是虚假的,但这更像是C时代的遗物。新的语言甚至不允许它,因为它
int a = 0;
可以吗
if(!a)
{
// do some stuff
}
而不是
if(a == 0)
{
// do some stuff
}
??因为它有效
在第一个示例中,int将被转换为bool,因此不使用
static\u cast(a)
可以吗?如果<代码> < <代码>大于1,会发生什么? 它是有效的,人们使用它,但我认为这远不是好的实践。它给出了关于值的语义的错误想法
0
通常被认为是虚假的,但这更像是C时代的遗物。新的语言甚至不允许它,因为它误导了代码的读者关于价值是什么。 它是有效的,人们使用它,但我认为这远不是好的实践。它给出了关于值的语义的错误想法
0
通常被认为是虚假的,但这更像是C时代的遗物。更新的语言甚至不允许这样做,因为它会误导代码的读者,让他们知道代码的价值是什么
在第一个示例中,int将被转换为bool,因此不使用static\u cast(a)
可以吗
是的,没关系。将进行隐式转换
如果a
大于1,会发生什么情况
任何非0值都可以隐式转换为true
。相反,只有值0将被视为false
你应该选择哪条路?两者都可以。我喜欢用我的代码来表达我的意图。如果我只想在a
等于0时运行If语句,我更喜欢
if (a == 0)
这正是我想要的
在第一个示例中,int将被转换为bool,因此不使用static\u cast(a)
可以吗
是的,没关系。将进行隐式转换
如果a
大于1,会发生什么情况
任何非0值都可以隐式转换为true
。相反,只有值0将被视为false
你应该选择哪条路?两者都可以。我喜欢用我的代码来表达我的意图。如果我只想在a
等于0时运行If语句,我更喜欢
if (a == 0)
这正是我想要的。“如果(!a),可以这样做吗?”当然。从技术上讲,所有条件子句
如果/,而/等都不需要bool
。它们只能转换为整数值,若值等于零,则视为假,否则视为真。但我个人更喜欢if(a==0)
,因为可读性更好。此外,关于良好实践的问题始终是基于意见的。确保它有效,并且标准对其进行了很好的定义-存在从int到bool的转换,其中0被视为假,非零被视为真。但请记住,您正在编写代码供其他人(包括将来的您)阅读。如果(a==0)写入,
是更明确的意图声明。经验丰富的程序员会正确地解释if(!a)
,但您提出这个问题的事实突出表明,当您的语句不能反映您的高级意图时,它会有多大问题。“如果(!a)
,可以这样做吗?”当然。从技术上讲,所有条件子句if
/而/等甚至不需要bool
。它们只能转换为整数值,若值等于零,则视为假,否则视为真。但我个人更喜欢if(a==0)
,因为可读性更好。此外,关于良好实践的问题始终是基于意见的。确保它有效,并且标准对其进行了很好的定义-存在从int到bool的转换,其中0被视为假,非零被视为真。但请记住,您正在编写代码供其他人(包括将来的您)阅读。如果(a==0)写入,
是更明确的意图声明。如果(!a)
,经验丰富的程序员将正确地解释,但您提出这个问题的事实突出表明,当您的语句没有反映您的高级意图时,它会有多大的问题。“0通常被认为是虚假的,但这更像是C时代的遗物”否,0为假,1为真,因为它来自布尔代数。不,布尔代数不知道0
和1
,它只知道true
和false
0
和1
有时被用作这些值的速记值,但它们在概念上完全不同。“0通常被认为是虚假的,但这更像是C时代的遗物”不,0是假的,1是真的,因为它来自布尔代数。不,布尔代数不知道0
和1
,它只知道true
和false
0
和1
有时被用作它们的速记值,但它们在概念上完全不同。我同意。而且,无论选择什么,都要保持一致。一致使用结构、缩进和空白都非常重要。我同意。而且,无论选择什么,都要保持一致。一致使用构造、缩进和空白都非常重要。