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

时间:2016-04-14 14:57:57

标签: c++ if-statement

我想:

if (true) 
{execute this statement}

那么if (std::cin >> X)如何在没有任何内容时执行为真&#34; true&#34;关于它?我能理解它是if ( x <= y)还是if ( y [operator] x ),但是什么样的逻辑是&#34; istream = true?&#34;。

4 个答案:

答案 0 :(得分:10)

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

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

请注意,std::cin >> X不仅是一个语句,还是一个表达式。它返回std::cin。 “链接”输入需要此行为,例如std::cin >> X >> Y >> Z。当您在if内放置输入时,相同的行为会派上用场:结果流会传递给operator booloperator 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)

这将返回:

  

如果未设置failbitbadbit,则为true。

     

否则为假。

答案 3 :(得分:3)

if条件内的内容将被评估为bool

if(cin >> X)表示如果条件为true,则向X读取内容;如果条件为false,则会发生其他事情(例如流结束),X不会更改。

E.g。要读到流结束,您可以使用while(cin >> X)