输入/输出库
来自 cppreference.cn
< cpp
C++ 包含以下输入/输出库:一个OOP 风格的基于流的 I/O 库,基于打印函数系列(自 C++23 起),以及一组标准的C 风格 I/O 函数。
目录 |
[编辑] 基于流的 I/O
基于流的输入/输出库围绕抽象的输入/输出设备组织。这些抽象设备允许相同的代码处理文件、内存流或执行即时任意操作(例如压缩)的自定义适配器设备的输入/输出。
大多数类都是模板化的,因此它们可以适应任何基本字符类型。为最常见的字符类型(char 和 wchar_t)提供了单独的类型定义。这些类组织成以下层次结构
继承图
抽象 | |
定义于头文件
<ios> | |
管理格式化标志和输入/输出异常 (类) | |
管理任意流缓冲区 (类模板) | |
定义于头文件
<streambuf> | |
抽象原始设备 (类模板) | |
定义于头文件
<ostream> | |
包装给定的抽象设备(std::basic_streambuf) 并提供高级输出接口 (类模板) | |
定义于头文件
<istream> | |
包装给定的抽象设备(std::basic_streambuf) 并提供高级输入接口 (类模板) | |
包装给定的抽象设备(std::basic_streambuf) 并提供高级输入/输出接口 (类模板) | |
文件 I/O 实现 | |
定义于头文件
<fstream> | |
实现原始文件设备 (类模板) | |
实现高级文件流输入操作 (类模板) | |
实现高级文件流输出操作 (类模板) | |
实现高级文件流输入/输出操作 (类模板) | |
字符串 I/O 实现 | |
定义于头文件
<sstream> | |
实现原始字符串设备 (类模板) | |
实现高级字符串流输入操作 (类模板) | |
实现高级字符串流输出操作 (类模板) | |
实现高级字符串流输入/输出操作 (类模板) | |
数组 I/O 实现 | |
定义于头文件
<spanstream> | |
(C++23) |
实现原始固定字符缓冲区设备 (类模板) |
(C++23) |
实现固定字符缓冲区输入操作 (类模板) |
(C++23) |
实现固定字符缓冲区输出操作 (类模板) |
(C++23) |
实现固定字符缓冲区输入/输出操作 (类模板) |
定义于头文件
<strstream> | |
(在 C++98 中已废弃)(在 C++26 中已移除) |
实现原始字符数组设备 (类) |
(在 C++98 中已废弃)(在 C++26 中已移除) |
实现字符数组输入操作 (类) |
(在 C++98 中已废弃)(在 C++26 中已移除) |
实现字符数组输出操作 (类) |
(在 C++98 中已废弃)(在 C++26 中已移除) |
实现字符数组输入/输出操作 (类) |
同步输出 (自 C++20 起) | |
定义于头文件
<syncstream> | |
(C++20) |
同步输出设备包装器 (类模板) |
(C++20) |
同步输出流包装器 (类模板) |
[编辑] 类型定义
在命名空间 std
中提供了以下常用字符类型的类型定义
[编辑] 预定义标准流对象
定义于头文件
<iostream> | |
从标准 C 输入流 stdin 读取 (全局对象) | |
写入标准 C 输出流 stdout (全局对象) | |
写入标准 C 错误流 stderr,无缓冲 (全局对象) | |
写入标准 C 错误流 stderr (全局对象) |
[编辑] I/O 操作器
基于流的 I/O 库使用I/O 操作器(例如 std::boolalpha, std::hex 等)来控制流的行为。
[编辑] 类型
定义了以下辅助类型
定义于头文件
<ios> | |
表示相对文件/流位置(从 fpos 偏移),足以表示任何文件大小 (类型定义) | |
表示 I/O 操作中传输的字符数或 I/O 缓冲区的大小 (类型定义) | |
表示流或文件中的绝对位置 (类模板) |
提供了以下 std::fpos<std::mbstate_t> 的类型定义名称
定义于头文件
<iosfwd> | |
类型 | 定义 |
std::streampos
|
std::fpos<std::char_traits<char>::state_type> |
std::wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos (C++20) |
std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) |
std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) |
std::fpos<std::char_traits<char32_t>::state_type> |
[编辑] 错误类别接口 (自 C++11 起)
定义于头文件
<ios> | |
(C++11) |
I/O 流错误码 (枚举) |
(C++11) |
标识 iostream 错误类别 (函数) |
[编辑] 打印函数 (自 C++23 起)
支持 Unicode 的打印函数系列,对已格式化的文本执行格式化 I/O。它们带来了 std::format 的所有性能优势,默认情况下与区域设置无关,减少了全局状态,避免了分配临时 std::string 对象并调用 operator<<,并且通常比iostream和stdio更高效。
提供了以下类打印函数
定义于头文件
<print> | |
(C++23) |
使用参数的格式化表示打印到 stdout 或文件流 (函数模板) |
(C++23) |
与 std::print 相同,但每次打印都以额外的换行符终止 (函数模板) |
使用类型擦除的参数表示打印到支持 Unicode 的 stdout 或文件流 (函数) | |
使用类型擦除的参数表示打印到 stdout 或文件流 (函数) | |
定义于头文件
<ostream> | |
(C++23) |
输出参数的格式化表示 (函数模板) |
(C++23) |
输出带附加 '\n' 的参数格式化表示 (函数模板) |
[编辑] C 风格 I/O
C++ 还包含C 定义的输入/输出函数,例如 std::fopen、std::getc 等。
[编辑] 另请参阅
文件系统库 (自 C++17 起) |