我得到的代码对我来说似乎是多余的:
char c;
cin>>c;
if(cin&&c=='n')
//do something
我不明白在if中引入 cin 的价值,是否总是会有 TRUE 值,因为我从未遇到任何情况(在我有限的经验)这个istream对象没有构建。
同样我也见过这个:
if(cin)
请纠正我哪里出错了。现在人们不像我已经知道的那样发布错误流中部分,主要部分是流何时失败而不是失败 的的ios_base ::初始化
答案 0 :(得分:4)
std::cin
是std::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
”。