在什么实际情况下bool(std :: ifstream)!= std :: ifstream :: good()?

时间:2013-05-15 01:33:14

标签: c++ io stream eof

我想知道在什么情况下我们可以:

bool(std::ifstream) != std::ifstream::good()

不同之处在于bool(std::ifstream)不测试eof位,而std::ifstream::good()测试它。但实际上,如果在文件结束后尝试读取某些内容,则会引发eof位。但是一旦你尝试这样做,我认为failbad位也是设置的。

因此,在什么情况下你只能提高eof位?

1 个答案:

答案 0 :(得分:0)

简单地说,无论何时遇到文件的结尾而不试图在后面阅读。考虑一个文件“one.txt”,其中只包含一个“1”字符。

未格式化输入的示例:

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    char chars[255] = {0};
    ifstream f("one.txt");
    f.getline(chars, 250, 'x');
    cout << f.good() << " != " << bool(f) << endl;
    return 0;
}
  

0!= 1
  按任意键继续 。 。

格式化输入的示例:

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    ifstream f("one.txt");
    int i; f >> i;
    cout << f.good() << " != " << bool(f) << endl;
    return 0;
}
  

0!= 1
  按任意键继续 。 。