說我有兩個數據成員的類:預期行爲未能從一個IStream讀取自定義類型時
class X {
std::string a;
int b;
public:
ostream& print(ostream& os);
istream& read(istream& is);
}
的print
函數輸出的所有數據格式良好的,像這樣:
ostream& X::print(ostream& os) {
return os << a << ' ' << b;
}
現在,read
函數應該做相反的事情:以指定的格式讀取內容(例如,如horse 54
,然後將導致a = "horse"
和b = 54
)。
所以說一個輸入不遵循這種格式。我的直覺說,只要遇到意想不到的字符(例如試圖讀取int
時的字母),我們將failbit
和設置爲將我們讀取的每個字符放回到流。在這種情況下,read
函數(或operator>>
)的預期行爲是什麼?標準庫的行爲如何?如果讀取失敗,我們是否需要撤銷所有字符提取?
讀取文檔的[unget(http://en.cppreference.com/w/cpp/io/basic_istream/unget),它看起來像每當任何東西,但'goodbit'設置unget會專門失敗(甚至可能是[throw](http://en.cppreference.com/w/cpp/io/basic_ios/exceptions)。所以我認爲如果你需要在'operator >>'中處理不好的格式化,你通常希望使用例外。 – Jason 2014-10-02 22:55:21