当在if语句中时,cin如何评估为true
How does cin evaluate to true when inside an if statement?
我认为:
if (true)
{execute this statement}
那么,当if (std::cin >> X)
没有"真"的时候,它是如何作为真执行的呢?我可以理解是if ( x <= y)
还是if ( y [operator] x )
,但"istream=true"是什么样的逻辑。
答案取决于标准C++库的版本:
- 在C++11之前,
if
内部的转换依赖于使用operator void*
将流转换为void*
- 从C++11开始,转换依赖于
std::istream
的operator bool
注意,std::cin >> X
不仅仅是一个语句,也是一个表达式。返回std::cin
。这种行为对于"链式"输入是必需的,例如std::cin >> X >> Y >> Z
。当您将输入放置在if
中时,同样的行为也很有用:结果流将传递给operator bool
或operator void*
,因此布尔值将被提供给条件。
std::cin
的类型为std::basic_istream
,它继承自std::basic_ios,后者有一个运算符:std::basic_ios::operator bool,在if语句中使用时调用该运算符。
if(x)
等效于if(bool(x))
在这种情况下,bool(x)
调用std::istream::operator bool(x)
这将返回:
如果没有设置CCD_ 21或CCD_。
否则为false。
if
条件内的内容将评估为bool
。
if(cin >> X)
意味着如果条件是true
,则某些内容被读取到X
;如果条件是false
,则发生其他事情(例如流结束),并且X
不改变。
例如,要读取到流结束,可以使用while(cin >> X)
。
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 无论条件是否为true,if总是在c++中执行
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- c++11评估顺序(未定义的行为)
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- Arduino-C++ bool 不会从 false 变为 true
- 如何使用"equal to"以外的评估编写开关语句
- 嵌套 if 中没有返回评估
- 如何使布尔变量仅在设置为 true 时才为真?
- 懒惰的参数评估try_emplace?
- 在实践中,在运行时为零的乘法中是否有任何"lazy"评估
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- C++17:使用 std::optional 来评估枚举是否包含值
- CNTK:->转发或 ->评估某些电脑上的崩溃,而不是其他电脑上的崩溃
- ConstexPR :GCC比Clang更努力地评估ConstexPR
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 尝试创建一个评估字符的bool函数,如果字母数字为字母,则返回true
- `如果constexpr(false)`始终评估为true
- 为什么string.empty()在字符串包含一个值时评估为true
- 当在if语句中时,cin如何评估为true