可以清除流的各个错误状态标志吗?

时间:2017-01-24 04:03:25

标签: c++

例如,我可以清除failbit标志吗? ios :: clear似乎清除了所有标志,或设置了单独的标志。 ios :: setstate似乎也设置了单独的标志但不清楚它们。

我问的原因是因为如果设置了badbit,我不想清除badbit。

1 个答案:

答案 0 :(得分:3)

仅清除failbit例如std::cin,您可以使用

std::cin.clear(std::cin.rdstate() & ~std::ios::failbit);

您需要rdstate()与要清除的标志位的否定之间的按位AND,否则您只是设置该标志。如果你考虑它,它是有道理的:rdstate()返回设置标志的状态,然后用你想要擦除的标志的否定只是删除该标志而没有其他任何被修改。< / p>