我正在学习
bool
变量。我了解到非零值被视为 true
,当我使用 cin
将 2
分配给 bool
时,结果是 true
,正如预期的那样。但是当我使用0.1
时,结果是false
。这是为什么?
我尝试过其他号码,例如
1.1
,-1.1
0.5
-0.5
。我的理解是,当绝对值为>= 1
时,则结果为true
,否则为false
。我不知道这是否正确,但如果是,那么如何将其与“非零值为真”规则相协调?
我了解到非零值被认为是真实的
这只适用于代码中执行的转换,不适用于
std::cin >>
。 std::cin >>
如何读取标量类型在 here 进行了描述。
对于
bool
,它读取单个 long
值(因此,如果您传递小数,它会在 .
处停止读取)。如果是0
,则结果是false
,否则是true
。但如果该数字既不是 0
也不是 1
,它还会设置一个错误标志,您应该检查该标志:
#include <iostream>
int main()
{
bool b = false;
if (std::cin >> b)
std::cout << "success, b=" << b << '\n';
else
std::cout << "failure, b=" << b << '\n';
}
对于
0
和 1
,分别打印 success, b=0
和 ...=1
。例如2
或 -1
,这将打印 failure, b=1
。
std::boolalpha
,则不会发生任何情况,而是需要字符串 true
或 false
(或其他字符串,如果您使用非默认区域设置)。