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