在 ifstream 上调用 clear() 有问题吗?

Is calling clear() on an ifstream problematic?

本文关键字:有问题 clear ifstream 调用      更新时间:2023-10-16

我有一个函数,可以在循环中读取具有固定格式的文件,如下所示:

istream.seekg(0, std::ios::begin);
while (istream >> x >> y) {
  // do something
}

正如我所发现的,并且在设置了循环退出eofbitfailbit后,这里已经很好地记录了。我希望能够在下次调用函数时再次重新读取文件,而无需关闭并重新打开ifstream因此要使其正常工作,我必须先添加一个istream.clear()。对我来说似乎很奇怪,因为 c++11 记录的 seekg() 行为说它会清除eofbit但它对failbit没有任何作用,这使得seekg()的这一方面对我来说似乎毫无用处。无论如何,调用clear()是否存在任何问题,例如隐藏任何潜在的错误条件等?

首先,让我在这里非常准确地介绍一下术语。当设置了坏位或故障位时,循环结束,但碰巧当设置了 eof 位时,故障位也会被设置。

bad位表示更严重(不可恢复(的错误,因此如果您检查istream.bad()是否为假,则调用clear以重用流应该没问题。