我想知道在什么情况下我们可以拥有:
bool(std::ifstream) != std::ifstream::good()
不同之处在于bool(std::ifstream)
不测试eof
位而std::ifstream::good()
测试它。但实际上,eof
如果尝试在文件结束后读取某些内容,则会引发该位。但是,一旦您尝试这样做,我认为也设置了fail
or 或bit 。bad
因此在什么情况下你只能提高eof
位?
简而言之,每当您遇到文件末尾而不尝试在其后面读取时。考虑一个文件“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
按任意键继续。. .