问题大致如下(这是):
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语句就等价于if( input.rdstate()==std::ios::failbit )了
@kevinGao: 不能说是等价与if( input.rdstate()==std::ios::failbit ),
if( (input.rdstate() & std::ios::failbit)==std::ios::failbit),因为input.rdstate()中有多个状态,而std::ios::failbit 只是一个状态而已。
@Wang Hui: 哦,是这样。不过faibit=“0010”,那么如果(状态a & faibit)!=0 ,即状态a为“**1*”这个样子的,那么a就只有failbit和_hardfail两种可能吧,
读取cin的状态
你好,这个条件是怎么判断的呢
尤其是中间那个‘&’的作用是什么
@kevinGao: 我的理解是用rdstate()读取后面failbit的状态字
@中州大道: 谢谢,楼下说的有理