输入/输出库
来自 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) |
IO 流错误码 (枚举) |
(C++11) |
标识 iostream 错误类别 (函数) |
[[编辑]] 打印函数 (自 C++23 起)
Unicode 感知的打印系列函数,用于对已格式化的文本执行格式化 I/O。 它们带来了 std::format 的所有性能优势,默认情况下与区域设置无关,减少了全局状态,避免了分配临时的 std::string 对象和调用 operator<<,并且通常使格式化比 iostreams 和 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 起) |