C++ IO 流详解:文件读写、字符串流
1. C 语言的输入与输出
C 语言中我们用到的最频繁的输入输出方式就是 scanf() 与 printf()。
scanf(): 从标准输入设备 (键盘) 读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备 (屏幕)。
注意宽度输出和精度输出控制。C 语言借助了相应的缓冲区来进行输入与输出。
核心概念
- 输出: 把内存中的数据写到设备(文件)当中。
- 输入: 把设备(文件)中的数据读到内存当中。
2. 流是什么
流简单来说指的是数据从一个地方流向另一个地方。
C++ 流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为'流'。
3. C++ IO 流
为了实现这种流动,C++ 定义了 I/O 标准类库,这些每个类都称为流/流类,用以完成某方面的功能。
C++ 标准库提供了 4 个全局流对象 cin、cout、cerr、clog,使用 cout 进行标准输出,即数据从内存流向控制台 (显示器)。使用 cin 进行标准输入即数据通过键盘输入到程序中,同时 C++ 标准库还提供了 cerr 用来进行标准错误的输出,以及 clog 进行日志的输出。
从继承关系可以看出,cout、cerr、clog 是 ostream 类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。
C++ IO 流总结
| 类名 | 继承自 | 描述 | 实例对象 |
|---|---|---|---|
std::ios_base | - | 所有 I/O 流类的基类,提供通用的 I/O 操作和状态管理功能 | - |
std::ios | std::ios_base | 抽象类,用于处理格式化的输入输出 | - |
std::istream | std::ios | 输入流类,用于从输入源读取数据 | std::cin |
std::ostream | std::ios | 输出流类,用于向输出目标写入数据 | std::cout, std::cerr, std::clog |
std::iostream | std::istream, std::ostream | 双向流类,同时支持输入和输出 | - |


