是否可以在 C++11 中手动设置 istream 失败位

Is it possible to manually set istream fail bit in C++11

我做了这个class:

class object {
  // data...
 public:
  friend std::istream& operator>>(std::istream& in, object& o) {
    char c, d;
    in >> c >> d;
    if (c == d) {
      /*set the fail bit some how*/
      in.putback(d);
      in.putback(c);
    } else
      o.set_data(c, d);
    return in;
  }
};

我正在查看文档(不太好),但找不到设置失败位的正确方法。我关心的原因是我希望能够像使用 int 一样 while(std::cin>>obj)/*do stuff*/;。但是,如果我现在这样做,只要出现错误,就会出现无限循环。 -_- 是否可以设置失败位,还是我必须以不同的方式解决这个问题?

您可以使用 basic_ios::setstate 函数设置输入流的 failbit:

in.setstate(std::ios_base::failbit);

您可以使用 setstate. Note you should put it after the invoke of putback,否则字符将无法 putback 成功编辑,因为流已处于错误状态。即

if (c==d) {

    in.putback(d);
    in.putback(c);

    /*set the fail bit some how*/
    in.setstate(std::ios_base::failbit);
}