Introduction To C++ IO Streams

Introduction To C++ IO Streams

本文关键字:Streams IO C++ To Introduction      更新时间:2023-10-16

我从这篇文章中得到了一段代码,我对它是如何工作的感到困惑?该片段首先说:

您可以通过测试读取结果来检测特定读取或写入操作是否失败。例如,要检查是否从用户读取了有效的整数,您可以执行以下操作:

int x;
if ( cin >> x ) 
{
    cout << "Please enter a valid number" << endl;
}

这是有效的,因为读取操作返回对流的引用。

我知道 cin>> x 操作返回对 cin 的引用,但我仍然对如何评估对标准输入流对象的引用允许您检查输入是否为有效整数感到困惑。

cinistream模板类的实例。 operator >>作用于此 istream 实例以将输入加载到数据中,并返回对此istream的引用。然后在while条件下,通过调用 cin::operator void*() const 进行测试(C++11 中explicit operator bool() const),该调用fail()函数来测试操作是否成功。这就是为什么您可以在 while 条件下使用此操作的原因

while ( cin >> x)
{
   //...

根据文档(http://www.cplusplus.com/reference/ios/ios/operator_bool/),运算符

explicit operator std::ios::bool() const;

"返回是否设置了错误标志(failbit 或 badbit)"和"如果至少设置了其中一个错误标志,则函数返回 false,否则返回 true"。

因此,当 if 语句将cin流强制转换为 bool 时,如果流设置了错误标志,则此运算符返回 false,否则true返回。