【问题标题】:Possible to clear individual error state flags for a stream?可以清除流的单个错误状态标志吗?
【发布时间】:2017-01-24 04:03:24
【问题描述】:

例如,我可以只清除故障位标志吗? ios::clear 似乎清除了所有标志,或设置了个别标志。 ios::setstate 似乎也设置了单独的标志,但没有清除它们。

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

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

    您需要在rdstate() 和您要清除的标志位的否定之间进行按位与运算,否则您只是在设置该标志。如果您考虑一下,这是有道理的:rdstate() 返回设置标志的状态,然后将其与您要删除的标志的否定相加,只会删除该标志,而不会修改其他任何内容。

    【讨论】:

    • 谢谢!你是怎么学的?另外,我使用 std::ios::failbit 还是 std::ios_base::failbit 有关系吗?
    • 我记得在The C++ Standard Library 中阅读过有关流等的内容,这是一个很棒且非常详细的 C++ 参考。关于第二个问题,ios 派生自ios_base(其中定义了常量),因此两种表示法是等价的。有关详细信息,请参阅this question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多