是否可以使自定义流像标准流一样工作以解决错误?那就是默认使用好/失败/坏/eof位而不是异常?
boost 文档仅提到为流错误抛出 std::failure 并让其他错误传播(例如,尝试分配缓冲区的 badalloc),但是 boost 代码似乎没有捕获这些,而是依靠用户代码来处理它们,但是我所有现有的代码都依赖于 good()、bad() 等方法和 clear() 方法,以防出错后需要重试。
是否可以使自定义流像标准流一样工作以解决错误?那就是默认使用好/失败/坏/eof位而不是异常?
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