为什么 c++ 中的 if(any number) 语句返回 true?[复制]

Why does the if(any number) statement in c++ returns true? [duplicate]

提问人:Amritansu Aditya 提问时间:9/24/2023 最后编辑:Remy LebeauAmritansu Aditya 更新时间:9/24/2023 访问量:119

问:

该语句需要一个条件来返回一个值。但是,例如,返回 true。我不明白为什么会这样。该声明在这里考虑的条件是什么?为什么它打印为真?ifif(2)if

if (9){
    cout<<"true";
}
else
    cout<<"false";
}
C++ IF- 条件语句

评论

8赞 Some programmer dude 9/24/2023
因为 C++ 规范说任何非零值都是“真”,并且只有“假”。0
3赞 Some programmer dude 9/24/2023
如果您认为等价于 ,也许会更容易理解。if (9)if (9 != 0)
2赞 Eljay 9/24/2023
if (9)计算结果为真实,因为 C++ 从 C 获取了行为。C 从 B v4 中得到了它。B v4 从 B v3 获得它,B v2 从 B v2 获得它,B v2 从 B v1 获得它。B v1 从 BCPL 获取了该行为。BCPL 从 CPL 获得了该行为。

答:

3赞 Vivick 9/24/2023 #1

任何非零整数都被认为是真实的

4赞 bitmask 9/24/2023 #2

if 语句要求表达式语句在上下文中可转换为布尔语句

这是一种奇特的说法,实际上,发生的事情是这样的:

if (static_cast<bool>(expr)) {
  true_branch();
} else {
  else_branch();
}

在你的例子中是一个整数字面量,这意味着 exactly 将被强制转换为,而其他任何内容都将被强制转换为 。expr0falsetrue

1赞 Yevgeny Streltsov 9/24/2023 #3

回到 ANSI C,甚至在 C 是 C++ 之前,直到今天在 ANSI C 中仍然如此。

计算结果为 false 的表达式为 0、0.0 和 NULL。不确定 bool 是哪一年推出的,这里有一个问题可以回答这个问题: Stack Overflow 问题“bool 是原生 C 类型吗?

False 多年来一直是 0;如果函数返回 T/F 值,则该值为 int 类型。不要问为什么不是无符号字符,这可能可以追溯到 CPU 寄存器过去的工作方式。

评论

1赞 Vlad from Moscow 9/24/2023
你忘了提到0l、0ll、0lu、0llu、0.0f、0.0L等等:)
1赞 DevNight89 9/24/2023 #4

这实际上来自C++发明之前的C语言,在大多数当前使用的编程语言(java,C#,javascript...)存在之前。制作 C 的人决定 0 表示假,非 0 表示真。我认为 java 或 python 开创了整数和布尔值之间的分离,不确定哪个。

0赞 KAYSER 9/24/2023 #5

它来自C++的祖先C。C 没有 or 。从技术上讲,它只有在您包含 时才会这样做,但它不像 C++ 那样内置。并且自 C99 以来就存在,因此在此之前没有办法使用。因此,要检查 C 语言中的 if 语句,您需要执行以下操作。truefalsestdbool.hstdbool.hbool

  • 如果 0 -> false
  • 其他一切(1, 100, -123, ...) -> true

这就是 C 检查 if 语句的方式。因此,令人惊讶的是,如果您将 -1 放在 if 语句中,则算作 true。这被带到了C++,在那里你有你问的同样的情况。

但并非所有编程语言都是这样的。在另一种非常有名的语言中,0 也被视为真。Ruby