Input/output library
C++包含以下输入/输出库:一个 面向对象编程 风格的 基于流的I/O 库 , 基于打印的函数族 (自C++23起) ,以及标准的一组 C风格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 的偏移量),足以表示任意文件大小
(typedef) |
|
|
表示 I/O 操作中传输的字符数量或 I/O 缓冲区的大小
(typedef) |
|
|
表示流或文件中的绝对位置
(类模板) |
|
以下为 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的打印族函数,用于对已格式化文本执行格式化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 起) |