在if语句中,cin如何评估为true?

cha*_*bit 7 c++ if-statement

我以为:

if (true) 
{execute this statement}
Run Code Online (Sandbox Code Playgroud)

那么if (std::cin >> X)当没有什么"真实"的时候,如何执行为真呢?我能理解,如果它是if ( x <= y)if ( y [operator] x ),但什么样的逻辑是"的IStream =真的吗?".

das*_*ght 10

答案取决于标准C++库的版本:

  • 在C++ 11之前,内部转换if依赖于将流转换为void*使用operator void*
  • 用C++ 11开始转换依赖于operator boolstd::istream

请注意,这std::cin >> X不仅是一个语句,还是一个表达式.它回来了std::cin."链接"输入需要此行为,例如std::cin >> X >> Y >> Z.当您将输入放在一个内部时,相同的行为会派上用场if:结果流传递给operator booloperator void*,因此一个布尔值被送到条件.


mar*_*inj 5

std::cinstd::basic_istream继承自std :: basic_ios 的类型,它有一个运算符:std :: basic_ios :: operator bool,在if语句中使用时调用.


Ric*_*ges 5

if(x)相当于if(bool(x))

在这种情况下bool(x)调用 std::istream::operator bool(x)

这将返回:

如果failbit或均未badbit设置,则为 true。

否则为假。