输入/输出库
来自 cppreference.com
< cpp
C++ 包含以下输入/输出库:一个面向对象风格的基于流的 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 中已删除) |
实现字符数组输入/输出操作 (类) |
同步输出 | |
定义在头文件
<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 的偏移量),足以表示任何文件大小。 (typedef) | |
表示 I/O 操作中传输的字符数或 I/O 缓冲区的大小。 (typedef) | |
表示流或文件中的绝对位置。 (类模板) |
提供以下 std::fpos<std::mbstate_t> 的 typedef 名称。
在头文件
<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> |
[edit] 错误类别接口
定义在头文件
<ios> 中 | |
(C++11) |
IO 流错误代码 (枚举) |
(C++11) |
标识 IO 流错误类别 (函数) |
[edit] 打印函数 (自 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' (函数模板) |
[edit] C 风格 I/O
C++ 还包括由 C 定义的 输入/输出函数,例如 std::fopen、std::getc 等。
[edit] 另请参阅
文件系统库 (自 C++17 起) |