似乎多余使用cin作为if,while的条件

时间:2017-07-19 18:24:48

标签: c++ istream

我得到的代码对我来说似乎是多余的:

    char c;
    cin>>c;
    if(cin&&c=='n')
    //do something

我不明白在if中引入 cin 的价值,是否总是会有 TRUE 值,因为我从未遇到任何情况(在我有限的经验)这个istream对象没有构建。

同样我也见过这个:

     if(cin)

请纠正我哪里出错了。现在人们不像我已经知道的那样发布错误流中部分,主要部分是流何时失败而不是失败 的的ios_base ::初始化

1 个答案:

答案 0 :(得分:4)

std::cinstd::basic_istream<char>的一个实例。由于它是在条件的上下文中使用的,因此我们感兴趣的是bool转换运算符。来自http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

  

std :: basic_ios :: operator bool

     

如果流没有错误并且已准备好进行I / O操作,则返回true。具体来说,返回!fail()

从文档中可以清楚地看出,if(cin)旨在检查cin是否有任何错误。更确切地说,它是“如果cin在上一次操作期间没有遇到错误”

if(cin&&c=='n')中的条件遵循相同的主体,但也检查提供的输入流n。换句话说,“如果cin没有遇到错误并返回了字符n