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



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

while (std::cin >> value)

使用std::cin作为条件将调用成员函数std::ios::operator bool。上面写着它"返回是否设置了错误标志(故障位或坏位(",其中不包括eofbit。尽管如此,传递文件末尾(按Ctrl+d(会终止循环。为什么?故障位或坏位也可以设置eofbit吗?

我也找到了这个解释,但在C++参考中,它特别指出"这个函数不返回与成员好相同的">

上面的循环不测试文件结尾。它测试读取值的失败,文件结尾只是造成这种情况的一个可能原因。即使是文件末尾也不一定会导致读取值失败,想象一下,读取一个数字以文件末尾结尾的整数,即使到达文件末尾,您仍然读取一个整数。

最重要的是,由于任何原因无法读取值都会设置失败位,而这个循环会对此进行测试。

最新更新