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

How does cin evaluate to true when inside an if statement?

本文关键字:评估 true 何评估 语句 if cin 当在      更新时间:2023-10-16

我认为:

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::istreamoperator bool

注意,std::cin >> X不仅仅是一个语句,也是一个表达式。返回std::cin。这种行为对于"链式"输入是必需的,例如std::cin >> X >> Y >> Z。当您将输入放置在if中时,同样的行为也很有用:结果流将传递给operator booloperator 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)