int main()
{
int i;
if (cin >> i)
{
//ok
}
else
{
//error
cin.setstate(std::ios_base::goodbit);
}
}
为什么我不能通过setstate()设置goodbit
来清除failbit
而不是cin.clear()?
答案 0 :(得分:5)
因为setstate
将当前状态与您通过按位OR
传递的任何状态组合在一起,所以失败位不会被清除(设置为零)。
所以假设:
Assume a very simple state mechanism:
00
^^
||
|\
| the fail bit
\
the ok bit
当状态为setstate(okbit)
时,01
只会给你11
(看看ma,失败位仍然设置),所以你真正做的就是搞砸了内部流状态。你应该完全避免使用setstate
。
Click供参考。