流状态
cin和cout对象中包含一个描述流状态(stream state)的数据成员(从ios_base 中继承过来的)。流状态(被定义为iostate类型,而iostate是一种bitmask类型)由3个ios_base元素组成:eofbit、badbit、failbit,其中每个元素都是一位,可以是1(设置)或0(清除)。每个元素及其操作功能如下表:
成员 | 描述 |
---|---|
eofbit | 如果到达文件的末尾,则设置为1 |
badbit | 如果流被破坏,这设置为1;例如文件读取失败 |
failbit | 如果输入操作未能读取预期的字符或输出操作没有写入预期的字符,则设置为1 |
goodbit | 另一种表示0的方法 |
good() | 如果流可以使用,则返回true ,否则返回false |
eof() | 如果eofbit被设置。则返回true |
bad() | 如果badbit被设置。则返回true |
fail() | 如果failbit被设置,则返回true |
rdstate() | 返回流状态 |
exceptions() | 返回一个位掩码,指出哪些标记导致异常被引发 |
exceptions(isostate ex) | 设置哪些状态导致clear()引发异常;例如ex是eofbit,则如果eofbit被设置,clear()将被引发异常 |
clear(iostate s) | 将流状态设置为s; s的默认值是0; |
setstate(iostate s) | 调用clear(rdstate() |
设置状态
设置状态的方法有两种,一种是clear()和setstate().
其中clear()是将状态设置为它的参数。例如 clear();是将所有的状态都设置为0。clear(eofbit);是将eofbit设置为1,其他的设置为0.
setstate()只影响其参数中已经设置的位,不影响其他位。
设置状态目的为了
I/O与异常
当某个输入函数设置了eofbit或badbit或failbit都不会引发异常。
只用在exceptions()的返回值中的一位被设置而当前状态的中对应位也被设置,就会引发ios_base::failure的异常。