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

Seems redundant use of cin as a condition with if, while

本文关键字:条件 if cin 多余      更新时间:2023-10-16

我得到了一个对我来说似乎多余的代码:

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

我不明白在if中引入cin的价值,它不是总是具有真正的价值吗,因为我从未遇到过任何未构造此istream对象的情况(以我有限的经验(。

同样,我也看到了这个:

if(cin)

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

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

std::basic_ios::运算符布尔值

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

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

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