在提取运算符中处理无效输入的推荐(标准)方法是什么:
std::istream& operator>>(std::istream& is, SomeType& val) {
// ...
return is;
}
是否应该设置std::ios_base::failbit
并立即返回?是否可以将val
对象保持为未定义状态,并且其中某些变量可能已更改?
我会遵循标准库的约定-即设置failbit
,将流指向您开始时的相同位置,并将输入设置为一些默认值-标准库将输入设置为0
错误,请执行与您的类型相对应的任何逻辑等效操作,可能是val = SomeType{};
。