0
执行以下代码时,我得到以下输出:EOF FAIL。因此,从空文件读取一行设置eofbit和failbit,但不是badbit。ios :: exceptions(...)在设置badbit时进行更改
如果我通过取消注释第11行来启用异常,则输出更改:EOF BAD FAIL。现在从空文件中读取一行设置eofbit,badbit,但不是失败位(否则发生异常)。
有人可以解释为什么启用异常改变方式,failbit和badbit被设置。这是记录在某处吗?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]) {
ifstream f("some_empty_file");
string line;
// f.exceptions(std::ifstream::failbit); // (line 11)
getline(f, line);
if(f.eof()) cout << "EOF ";
if(f.bad()) cout << "BAD ";
if(f.fail()) cout << "FAIL ";
cout << endl;
f.close();
return 0;
}
编辑:我读了https://stackoverflow.com/a/11085193/3821618关于badbit和failbit差异的答案。但是,这并没有回答这个问题,为什么启用例外,从空文件读取成为“严重错误”,而它不是,如果我不叫,f.exceptions(...)
既没有调用'f.exception(..)'也没有触发异常。它只是'f.bad()'的结果。为什么这样? – JAyP
@JAyP [我看不出任何行为改变](http://coliru.stacked-crooked.com/a/bd1d35f7aa25fcb3)? –
有趣的是:在gnu/linux上gcc5.4没有改变,但是它在macos上改变了**和clang-800.0.42.1。我没有想到这是平台的依赖。感谢您的回答。 – JAyP