我想:
if (true)
{execute this statement}
那么if (std::cin >> X)
如何在没有任何内容时执行为真&#34; true&#34;关于它?我能理解它是if ( x <= y)
还是if ( y [operator] x )
,但是什么样的逻辑是&#34; istream = true?&#34;。
答案 0 :(得分:10)
答案取决于标准C ++库的版本:
if
内的转换依赖于使用void*
将流转换为operator void*
std::istream
operator bool
请注意,std::cin >> X
不仅是一个语句,还是一个表达式。它返回std::cin
。 “链接”输入需要此行为,例如std::cin >> X >> Y >> Z
。当您在if
内放置输入时,相同的行为会派上用场:结果流会传递给operator bool
或operator void*
,因此布尔值会被提供给条件。
答案 1 :(得分:5)
std::cin
的类型为std::basic_istream
,它继承自std :: basic_ios,它有一个运算符:std::basic_ios::operator bool,在if语句中使用时会被调用。
答案 2 :(得分:3)
if(x)
相当于if(bool(x))
在这种情况下bool(x)
调用std::istream::operator bool(x)
这将返回:
如果未设置
failbit
或badbit
,则为true。否则为假。
答案 3 :(得分:3)
if
条件内的内容将被评估为bool
。
if(cin >> X)
表示如果条件为true
,则向X
读取内容;如果条件为false
,则会发生其他事情(例如流结束),X
不会更改。
E.g。要读到流结束,您可以使用while(cin >> X)
。