1. IO对象不可复制或赋值,所以它不能被存储在vector或其他容器中,而不能作为形参或返回值,若需传递或返回IO对象,只能传递IO对象的指针或引用。
2. 关于IO标准库中的条件状态:badbit标志着系统级的故障,出现这类错误后流通常就不能再继续使用了;failbit标志着可修正的问题发生,可以通过stream.clear()方法来使其恢复;eofbit指示流达到了文件结尾。如果上述3者有任意一个为true,则流不能不使用。
一个恢复cin流的程序:
void main()
{
int i;
//逗号表达式:依次计算每一个表达式的内容,并返回最后一个的值
while(cin>>i,1)
{
cout<<i<<endl;
//判断failbit是否被置位
if(cin.fail())
{
cerr<<"io fails!"<<endl;
//恢复cin,或用cin.clear();
cin.clear(istream::failbit^cin.rdstate());
//忽略位于输入缓冲区的错误字符,若不进
//行此操作错误字符会被再次传给cin导致错误重演
cin.ignore();
}
}
system("pause");
}