• C++问题:if( input.rdstate() & std::ios::failbit )


    前言

    今天在博客园的博问里面看到这个问题:觉的挺不错的,收集一下。以后有时间的话也会继续收集一些自己不会的问题,然后整理到自己的博客里面。

    因为不断的遇到问题,不断的解决问题才能更好,更快的学习,成长。或许将来一不小心自己也遇到了同样的问题的话,就有经验了。

    正文:原问题地址:http://q.cnblogs.com/q/35130/

    其中的:

    std::ifstream input;
    input.open( filename.c_str(), std::ifstream::in );
    if( input.rdstate() & std::ios::failbit )
    

    if语句那一行怎么理解?

    解答:

    1:iostate rdstate ( ) const; 返回的是iostate,简单的说也就是一个int数值.用2进制数据的某一个位置设置为1表示一种状态

    2:failbit 的定义如下,二进制数据的第二位为1的时候说明是该数据。

    static const _Iostate goodbit = (_Iostate)0x0;
    static const _Iostate eofbit = (_Iostate)0x1;
    static const _Iostate failbit = (_Iostate)0x2;
    static const _Iostate badbit = (_Iostate)0x4;
    static const _Iostate _Hardfail = (_Iostate)0x10;

    3:input.rdstate() & std::ios::failbit  通过位运算的与来判断当前的状态是否是failbit。

    不过不能说是等价与if( input.rdstate()==std::ios::failbit ),

    if( (input.rdstate() & std::ios::failbit)==std::ios::failbit),因为input.rdstate()中有多个状态,而std::ios::failbit 只是一个状态而已。

     

  • 相关阅读:
    Linux文本处理
    鲜为人知的maven标签解说
    springboot整合websocket高级版
    springboot整合swagger。完爆前后端调试
    java的干儿子锁Lock
    AbstractQueuedSynchronizer(AQS)抽丝剥茧深入了解JUC框架原理
    【优雅写代码系统】springboot+mybatis+pagehelper+mybatisplus+druid教你如何优雅写代码
    居然还有人这样解说mybatis运行原理
    mybatis精讲(七)--动态sql
    基于redis实现分布式锁
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2478771.html
Copyright © 2020-2023  润新知