C++:使用 std::cin 作为条件时的文件结尾解释

C++: end-of-file interpretation when using std::cin as a condition

我知道我们可以用std::cin作为条件,比如在

while (std::cin >> value)

使用std::cin作为条件将调用成员函数std::ios::operator bool。它说 它"returns whether an error flag is set (either failbit or badbit)",其中不包括 eofbit。尽管如此,传递文件结尾(通过 Ctrl+d)会终止循环。为什么? failbit 或 badbit 也可以设置 eofbit 吗?

我也找到了 的解释,但是在 C++ Reference 中明确指出 "this function does not return the same as member good"

上面的循环不测试文件结尾。它测试 读取值失败,文件末尾只是导致此问题的一个可能原因。即使文件末尾也不一定会导致读取值失败,想象一下读取一个整数,其中数字在文件末尾终止,即使您到达文件末尾,您仍然读取一个整数。

最重要的是,无论出于何种原因未能读取值都会设置失败位,并且此循环会对此进行测试。