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对象(流对象)状态,置位与复位相关推荐
- java基础----IO打印流PrintStream
package com.henu.io;import java.io.PrintStream;/** •public PrintStream(String fileName): 使用指定的文件名创建一 ...
- java基础---IO字符流
package com.henu.io;import java.io.FileNotFoundException; import java.io.FileReader;/** •FileReader( ...
- C++ Primer 5th笔记(8)chapter8 类:IO库-流的状态
1. 定义:流有状态,表示是否出错. eg. 通常在使用它时要测试它的状态: while (cin >> word) 注:只有在非错误状态下,stream才能被读写 2. 流的状态值 st ...
- 对象流--对象的序列化
1.对象是存在于内存中的(堆内存),有时候我们需要将对象保存在硬盘上,又有时我们需要将对象保存在另一台计算机上等等这样的操作, 这时候我们需要将对象转化为一个字节序列,而这个过程就是对象的序列化,相反 ...
- java基础---IO转换流
package com.henu.io;import java.io.FileInputStream; import java.io.FileNotFoundException; import jav ...
- Java基础(三)IO流和对象流
文件及IO流 File类 1.来自于java.io包 2.是文件和目录路径名的抽象表示 3.文件和目录可以通过File封装为对象 4.对于File而言,封装的不是真正存在的文件,仅仅是封装一个路径,路 ...
- 【java基础,IO合集】文件流、高级流(缓冲流、对象流)、 序列化接口java.io.Serrializable
目录 文件流 1 块读写的文件复制操作 2 文件输出流-覆盖模式 3 文件输出流-追加模式 4 文件输出流-读取文本数据 高级流 1 流连接示意图 2 缓冲流 2.1 使用缓冲流完成文件复制操作 2 ...
- Java基础——IO流
IO流基础知识内容: 1.java.io包下 File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源. File file1 = new File("d:\\ ...
- JAVA学习 API_day10(缓冲流, 打印流, 对象流)
缓冲流, 转换流, 打印流, 对象流 1. 缓冲流 1. 字节缓冲流 2. 字符缓冲流 2.打印流 1.字节打印流(了解) 2.字符打印流 3.对象流 1. 缓冲流 1. 字节缓冲流 包装 -> ...
- Day13 对象流 自定义容器 Collection
一 对象流 对象流 序列化 公共流(节点流) ObjectInputStream 反序列化输入流 新增方法 readObject() ObjectOutp ...
最新文章
- wireshrk中的名词说明
- python 不同模块之间的引用错误问题
- 自定义异常禁用异常堆栈_如何在Mac上禁用或自定义自动更正
- Xen的起源与工作原理
- Selenium入门11 滚动条控制(通过js)
- Protocol Buffer 序列化
- 软考信息安全工程师学习笔记三(1.3 信息安全管理基础)
- 三大运营商回应“提速降费”:认真落实各项要求
- 使用httpwatch抓包
- R语言机器学习:caret包使用及其黑箱模型解释(连续变量预测)
- SQL Server多表同时查询
- redis与mysql性能对比、redis缓存穿透、缓存雪崩
- python3多线程爬取京东投诉信息
- laravel mysql 时区_Laravel时区设置
- 如何进bios设置ssd固态硬盘为第一启动
- windows 查看/清除DNS解析记录
- 读硕士和读博士有什么区别?
- ⭐算法入门⭐《动态规划 - 串匹配》困难02 —— LeetCode 72. 编辑距离
- C语言编译出现一个警告,16种C语言编译警告(Warning)类型的解决方法
- [学习Qt:出现问题 1]程序异常结束。The process was ended forcefully.
热门文章
- python中英文混输对不齐_python中英文混合字符串对齐输出
- 英语学习——长难句02
- Unity3D项目加密-精锐5加密锁解决方案
- php://filter协议的另一个姿势
- 利用思维导图软件绘制鱼骨图怎样做
- left<=right or left<right
- Linux ARM平台开发系列讲解(网络篇) 2.1 Marvell 88EA6321/6320 Switch 数据手册阅读之了解芯片功能
- Echarts —自定义label标签的样式(formatter,rich,添加图标等操作)
- Python实现十进制转换为二进制(递归实现)
- 人工智能数学基础2:指数、方根及对数运算公式