为什么在C ++中if-statement的long int范围内所有可能的整数都为“true”,但0不是? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

基本上,if语句如何分析整数是真还是假?这两行简单的行打印出“Hello”,正整数为764:

int a=764;
if(a){ cout<<"Hello"; }else{ cout<<"Bye"; } //Hello

如果我将整数从正变为负(-231),它也会输出“Hello”:

int a=-231;
if(a){ cout<<"Hello"; }else{ cout<<"Bye"; } //Hello

但如果我将a设为0,它会得到false

int a=0;
if(a){ cout<<"Hello"; }else{ cout<<"Bye"; } //Bye

true的范围是long int,从-21474836472147483647只有一个例外:0。这是怎么发生的?什么是if实际上做的确定如此?

c++ if-statement int implicit-conversion boolean-logic
1个回答
1
投票

这是设计的预期行为。 C / C ++中的if (condition) { ... } else { ... }语句计算一个布尔表达式,该表达式最终将是trueif块执行)或falseelse块执行)。当您将整数作为条件传递时,它必须减少为true或false,并且编译器实际将其解释为if (integer != 0)。对于任何整数类型(有符号或无符号),这都是相同的。

这是C / C ++中非常常见的习惯用语,尽管有人可能认为它不是最易读的符号,你应该总是明确表示你打算通过使用if (integer != 0)验证整数是否为0。

© www.soinside.com 2019 - 2024. All rights reserved.