以下代碼應該將數據從wifstream複製到wcout。 複製內容後,程序將引發ios :: failure異常。爲什麼std :: copy(從istream到ostream)引發一個ios :: failure異常?
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <locale>
#include <iterator>
#include <algorithm>
int main(void)
{
std::locale::global(std::locale(""));
std::wifstream is;
is.exceptions(std::ios::failbit | std::ios::badbit);
is.open("test.ts", std::ios::binary);
is >> std::noskipws;
std::istream_iterator<wchar_t, wchar_t> in(is);
std::istream_iterator<wchar_t, wchar_t> end;
std::copy(in, end,
std::ostream_iterator<wchar_t, wchar_t>(std::wcout));
return 0;
}
流時才拋出一個異常(見異常屏蔽)如果有什麼不好的,但不是在EOF。
設置流的例外似乎是個好主意,但它往往按預期不起作用。相反,只需在使用輸入之前檢查流狀態,例如'if(stream >> var){/ * only now use var * /}'。 – 2010-11-04 17:55:53