Input/output library
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 中移除)
|
实现字符数组输入/输出操作
(类) |
同步输出 (since C++20) |
|
|
定义于头文件
<syncstream>
|
|
|
(C++20)
|
同步输出设备包装器
(类模板) |
|
(C++20)
|
同步输出流包装器
(类模板) |
Typedefs
以下针对常见字符类型的类型定义在命名空间
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 > |
错误类别接口 (since C++11)
|
定义于头文件
<ios>
|
|
|
(C++11)
|
IO流错误码
(枚举) |
|
(C++11)
|
标识iostream错误类别
(函数) |
输出函数 (since C++23)
支持Unicode的print系列函数可对已格式化的文本执行格式化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 起) |