【发布时间】:2017-01-24 04:03:24
【问题描述】:
例如,我可以只清除故障位标志吗? ios::clear 似乎清除了所有标志,或设置了个别标志。 ios::setstate 似乎也设置了单独的标志,但没有清除它们。
我问的原因是因为如果设置了badbit,我不想清除它。
【问题讨论】:
标签: c++
例如,我可以只清除故障位标志吗? ios::clear 似乎清除了所有标志,或设置了个别标志。 ios::setstate 似乎也设置了单独的标志,但没有清除它们。
我问的原因是因为如果设置了badbit,我不想清除它。
【问题讨论】:
标签: c++
仅清除 failbit 为例如std::cin,可以使用
std::cin.clear(std::cin.rdstate() & ~std::ios::failbit);
您需要在rdstate() 和您要清除的标志位的否定之间进行按位与运算,否则您只是在设置该标志。如果您考虑一下,这是有道理的:rdstate() 返回设置标志的状态,然后将其与您要删除的标志的否定相加,只会删除该标志,而不会修改其他任何内容。
【讨论】:
ios 派生自ios_base(其中定义了常量),因此两种表示法是等价的。有关详细信息,请参阅this question。