提问人:Amritansu Aditya 提问时间:9/24/2023 最后编辑:Remy LebeauAmritansu Aditya 更新时间:9/24/2023 访问量:119
为什么 c++ 中的 if(any number) 语句返回 true?[复制]
Why does the if(any number) statement in c++ returns true? [duplicate]
问:
该语句需要一个条件来返回一个值。但是,例如,返回 true。我不明白为什么会这样。该声明在这里考虑的条件是什么?为什么它打印为真?if
if(2)
if
if (9){
cout<<"true";
}
else
cout<<"false";
}
答:
任何非零整数都被认为是真实的
这是一种奇特的说法,实际上,发生的事情是这样的:
if (static_cast<bool>(expr)) {
true_branch();
} else {
else_branch();
}
在你的例子中是一个整数字面量,这意味着 exactly 将被强制转换为,而其他任何内容都将被强制转换为 。expr
0
false
true
回到 ANSI C,甚至在 C 是 C++ 之前,直到今天在 ANSI C 中仍然如此。
计算结果为 false 的表达式为 0、0.0 和 NULL。不确定 bool 是哪一年推出的,这里有一个问题可以回答这个问题: Stack Overflow 问题“bool 是原生 C 类型吗?
False 多年来一直是 0;如果函数返回 T/F 值,则该值为 int 类型。不要问为什么不是无符号字符,这可能可以追溯到 CPU 寄存器过去的工作方式。
评论
这实际上来自C++发明之前的C语言,在大多数当前使用的编程语言(java,C#,javascript...)存在之前。制作 C 的人决定 0 表示假,非 0 表示真。我认为 java 或 python 开创了整数和布尔值之间的分离,不确定哪个。
它来自C++的祖先C。C 没有 or 。从技术上讲,它只有在您包含 时才会这样做,但它不像 C++ 那样内置。并且自 C99 以来就存在,因此在此之前没有办法使用。因此,要检查 C 语言中的 if 语句,您需要执行以下操作。true
false
stdbool.h
stdbool.h
bool
- 如果 0 -> false
- 其他一切(1, 100, -123, ...) -> true
这就是 C 检查 if 语句的方式。因此,令人惊讶的是,如果您将 -1 放在 if 语句中,则算作 true。这被带到了C++,在那里你有你问的同样的情况。
但并非所有编程语言都是这样的。在另一种非常有名的语言中,0 也被视为真。Ruby
评论
0
if (9)
if (9 != 0)
if (9)
计算结果为真实,因为 C++ 从 C 获取了行为。C 从 B v4 中得到了它。B v4 从 B v3 获得它,B v2 从 B v2 获得它,B v2 从 B v1 获得它。B v1 从 BCPL 获取了该行为。BCPL 从 CPL 获得了该行为。