Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “是”吗&引用;intsead of";==0“;检查int是否为0良好做法?_C++_Type Conversion_Implicit Conversion - Fatal编程技术网

C++ “是”吗&引用;intsead of";==0“;检查int是否为0良好做法?

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时代的遗物。新的语言甚至不允许它,因为它

假设我们有一个变量a:

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
有时被用作它们的速记值,但它们在概念上完全不同。我同意。而且,无论选择什么,都要保持一致。一致使用结构、缩进和空白都非常重要。我同意。而且,无论选择什么,都要保持一致。一致使用构造、缩进和空白都非常重要。