C++ 学习笔记(8)IO库

C++ 学习笔记(8)IO库

参考书籍:《C++ Primer 5th》
API:std::iostream


8.1 IO类

在这里插入图片描述

8.1.1 IO对象无拷贝或赋值

  • 不能拷贝或对IO对象赋值,通常用引用来操作。
  • 读写IO对象会改变其状态,所以传递或返回的引用不是const的。
ofstream out1, out2;
out1 = out2;				// 错误。不能对流对象赋值
ofstream print(ofstream);	// 错误。不能初始化ofstream参数
out2 = printf(out2);		// 错误。不能拷贝流对象

8.1.2 条件状态

在这里插入图片描述
在这里插入图片描述

  • badbit:系统级错误,如不可恢复的读写错误。置位后,流就无法使用。
  • failbit:可恢复错误,如读取数值时读出错误字符。
  • 达到文件结束位置时,eofbit 和 failbit 都会被置位。

8.1.3 管理输出缓冲

  • 每个输出流都管理一个缓冲区,用来保存程序的读写数据。
  • 导致缓冲刷新(数据真正写到输出设备或文件)原因:
    • 程序正常结束,作为main函数return操作的一部分,刷新缓冲。
    • 使用endl、flush、ends显式刷新。
    • 使用操纵符unitbuf设置流状态(每次输出操作后都刷新),默认情况下cerr是unitbuf的。
    • 一个流被关联到另一个流。读写流会让被关联的流缓冲区刷新。默认cin和cerr都关联cout,即读cin或写cerr都会导致cout缓冲区刷新。
cout << "a" << endl;		// 输出a和换行,然后刷新缓冲区
cout << "a" << flush;	// 输出a,刷新缓冲区
cout << "a" << ends;	// 输出a和空格,属性缓冲区

cout << unitbuf;			// 开启每次输出后就flush
// 所有输出操作后都会立即更新
cout << nounitbuf;		// 关闭
  • 关联流使用 tie 函数。
  • 每个流同时最多关联到一个流,但多个流可以同时关联到同一个ostream。

8.2 文件输入输出

在这里插入图片描述

8.2.1 使用文件流对象(ifstream、ofstream、iofstream)

  • 使用open打开指定文件后,文件流和文件就保持关联。要关联另一个文件时,要先close关闭已经关联的文件。
  • 当fstream对象被销毁时,close会自动调用。

8.2.2 文件模式

在这里插入图片描述

  • app:append,默认以写的方式打开。ate:at end,默认以读的方式打开。如果打开文件不存在,app会生成这个文件,ate会打开失败。
  • trunc:truncated,舍弃流的内容。
  • ofstream 对象只能设定 out 模式。
  • ifstream 对象只能设定 in 模式。
  • 只有 out 被设定时才能用 tructc 模式。
  • 默认 out 模式打开文件也会被截断,要保留文件内容应该同时用app,或者用in。
  • ate 和 binary 模式可以用于任何类型的文件流对象。

8.3 string流

在这里插入图片描述


小结

  • iostream 处理控制台IO
  • fstream 处理命名文件IO
  • stringstream 完成内存string 的IO
  • fstream 和 stringstream都继承至iostream。同理istream、ostream也是其基类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值