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