我是靠谱客的博主 小巧乌冬面,最近开发中收集的这篇文章主要介绍C++基础 - IO对象(流对象)状态,置位与复位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

IO对象(流对象)不能拷贝和赋值,只能以引用的方式传递和返回

    // IO对象(流对象)不能拷贝和赋值,只能以引用的方式传递和返回
    ofstream out1, out2;
    out1 = out2; // 错误,不能对流对象赋值
    ofstream print(ofstream); // 错误,不能初始化流对象参数
    out2 = print(out2); // 错误,不能拷贝流对象

IO对象(流对象)状态

确定一个流对象的状态的最简单方法是将它当作一个条件来使用,我们将流当作条件使用的代码等价与 !fail()。注意,eof 和 bad 操作只能表示特定的错误,不过一旦被置位,则failbit同样会被置位(即失败状态),因此,使用good() / fail() 是确定流总体状态的正确方法。

    while(cin >> value) {
        ...
    }

IO对象(流对象)置位(表示错误)与复位(清除)

void printState(istream& in) {
    // 流状态打印
    cout << "goodstate: " << in.good() << ", goodbit: " << in.goodbit << endl;
    cout << "failstate: " << in.fail() << ", failbit: " << in.failbit << endl;
    cout << "eofstate: " << in.eof() << ", eofbit: " << in.eofbit << endl;
    cout << "badstate: " << in.bad() << ", badbit: " << in.badbit << endl;
    cout << endl;
}
void baseIOStateTest(){    
    // IO对象(流对象)状态
    int value;
    while(cin >> value) {
        printState(cin);
    }
    
    auto old_state = cin.rdstate(); // 读取当前状态并记录
    printState(cin);
    
    cin.clear(); // 流状态复位,即错误位全部清除
    printState(cin);
    
    cin.setstate(old_state); // 设置为原来错误状态,导致failbit置位
    cin.clear(cin.rdstate() & ~cin.failbit); // 流状态复位,failbit复位
    printState(cin);
    
    cin.setstate(old_state); // 设置为原来错误状态,导致failbit置位
    cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit); // 流状态复位,failbit和badbit复位
    printState(cin);
    
    cin.setstate(old_state); // 设置为原来错误状态,导致failbit置位
    printState(cin);
    
    int temp = 0;
    return;
}

结果截图

参考 

C++ primer中文版 第五版 第8章

最后

以上就是小巧乌冬面为你收集整理的C++基础 - IO对象(流对象)状态,置位与复位的全部内容,希望文章能够帮你解决C++基础 - IO对象(流对象)状态,置位与复位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部