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

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

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

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

我不明白在if中引入cin的价值,是不是总要有TRUE值,因为我我从来没有遇到过(以我有限的经验)没有构造这个 istream 对象的情况。

同样我也看到了这个:

     if(cin)

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

std::cin is an instance of std::basic_istream<char>. Since it's being used in the context of a condition, we are interested it's bool conversion operator. From http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool :

std::basic_ios::operator bool

Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail()

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

if(cin&&c=='n') 中的条件遵循相同的原则,但也会检查提供的输入流 n。也就是说,"if cin没有遇到错误,返回字符n".