在C++中,您可以手动设置流的failbit吗?怎么样?

Jar*_*red 22 c++ validation inputstream

我正在重载输入流运算符以与Time类一起使用,并且如果输入与我预期的时间格式(hh:mm)不匹配,则希望手动设置输入流的failbit.可以这样做吗?怎么样?

谢谢!

Jac*_*oyd 28

是的,您可以设置它ios::setstate,如下所示:

#include <iostream>
#include <ios>

int main()
   {
   std::cout << "Hi\n";

   std::cout.setstate(std::ios::failbit);

   std::cout << "Fail!\n";
   }
Run Code Online (Sandbox Code Playgroud)

由于cout处于失败状态,因此不会生成第二个输出.

(一个例外对我来说似乎更清晰,但是YMMV)

  • 我认为设置`failbit`是报告流错误的一种非常有效的方法,因为客户端代码可以使用相同的`if(in >> val){/*success*/}`idiom,它们可以用于基本类型. (7认同)
  • 设置失败位可能比异常更好,因为它反映了标准类型与流一起使用的方式. (6认同)
  • 确实.通常,在发现failbit已设置为此低级别后,您会从其他位置抛出异常. (4认同)