是否可以使自定义流在错误方面像标准流一样工作?那就是默认使用 good/fail/bad/eof 位而不是异常(exception)?
boost 文档只提到为流错误抛出 std::failure 并让其他错误传播(例如,尝试分配缓冲区的 badalloc),但是 boost 代码似乎没有捕捉到这些,而是依赖于用户代码来处理它们,但我现有的所有代码都依赖于 good()、bad() 等方法和 clear() 方法,以防出错后需要重试。
最佳答案
来自 http://www.trip.net/~bobwb/cppnotes/lec08.htm
可以使用以下方式设置错误状态:
无效清除(iostate = 0);
默认值零导致 ios_base::goodbit 被设置。
清除();
因此等同于
清除(0);
相当于
清除(ios_base::goodbit);
注意 ios_base::goodbit 是一个非零值。 clear() 可用于将其他位之一设置为程序员针对特定对象的 operator>>() 代码的一部分。例如:
if (bad_char) is.clear(ios_base::badbit);//设置 istream 的 badbit
关于C++ Boost io 流,错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152913/