说我有两个数据成员的类:预期行为未能从一个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