Namespaces
Variants

Input/output library

From cppreference.net

C++包含以下输入/输出库:一个 面向对象编程 风格的 基于流的I/O 基于打印的函数族 (自C++23起) ,以及标准的一组 C风格I/O 函数。

目录

基于流的输入/输出

基于流的输入/输出库围绕抽象输入/输出设备进行组织。这些抽象设备允许同一段代码处理文件、内存流或自定义适配器设备的输入/输出,这些适配器设备可实时执行任意操作(例如压缩)。

大多数类都采用模板化设计,因此能够适配任意基础字符类型。针对最常用的基础字符类型( char wchar_t )提供了独立的类型定义。这些类按以下层次结构进行组织:

cpp/io/ios base cpp/io/basic ios cpp/io/basic istream cpp/io/basic ifstream cpp/io/basic istringstream cpp/io/basic ostream cpp/io/basic ofstream cpp/io/basic ostringstream cpp/io/basic fstream cpp/io/basic stringstream cpp/io/basic iostream std-io-complete-inheritance.svg

继承关系图

抽象层
定义于头文件 <ios>
管理格式化标志和输入/输出异常
(类)
管理任意流缓冲区
(类模板)
定义于头文件 <streambuf>
抽象原始设备
(类模板)
定义于头文件 <ostream>
包装给定的抽象设备 ( std::basic_streambuf )
并提供高层输出接口
(类模板)
定义于头文件 <istream>
包装给定的抽象设备 ( std::basic_streambuf )
并提供高层输入接口
(类模板)
包装给定的抽象设备 ( std::basic_streambuf )
并提供高层输入/输出接口
(类模板)
文件 I/O 实现
定义于头文件 <fstream>
实现原始文件设备
(类模板)
实现高层文件流输入操作
(类模板)
实现高层文件流输出操作
(类模板)
实现高层文件流输入/输出操作
(类模板)
字符串 I/O 实现
定义于头文件 <sstream>
实现原始字符串设备
(类模板)
实现高层字符串流输入操作
(类模板)
实现高层字符串流输出操作
(类模板)
实现高层字符串流输入/输出操作
(类模板)
数组 I/O 实现
定义于头文件 <spanstream>
实现原始固定字符缓冲区设备
(类模板)
实现固定字符缓冲区输入操作
(类模板)
实现固定字符缓冲区输出操作
(类模板)
实现固定字符缓冲区输入/输出操作
(类模板)
定义于头文件 <strstream>
(C++98 中弃用) (C++26 中移除)
实现原始字符数组设备
(类)
(C++98 中弃用) (C++26 中移除)
实现字符数组输入操作
(类)
(C++98 中弃用) (C++26 中移除)
实现字符数组输出操作
(类)
(C++98 中弃用) (C++26 中移除)
实现字符数组输入/输出操作
(类)
同步输出 (C++20 起)
定义于头文件 <syncstream>
同步输出设备包装器
(类模板)
同步输出流包装器
(类模板)

类型定义

命名空间 std 中提供了以下常见字符类型的类型定义:

类型 定义
定义于头文件 <ios>
std::ios std:: basic_ios < char >
std::wios std:: basic_ios < wchar_t >
定义于头文件 <streambuf>
std::streambuf std:: basic_streambuf < char >
std::wstreambuf std:: basic_streambuf < wchar_t >
定义于头文件 <istream>
std::istream std:: basic_istream < char >
std::wistream std:: basic_istream < wchar_t >
std::iostream std:: basic_iostream < char >
std::wiostream std:: basic_iostream < wchar_t >
定义于头文件 <ostream>
std::ostream std:: basic_ostream < char >
std::wostream std:: basic_ostream < wchar_t >
定义于头文件 <fstream>
std::filebuf std:: basic_filebuf < char >
std::wfilebuf std:: basic_filebuf < wchar_t >
std::ifstream std:: basic_ifstream < char >
std::wifstream std:: basic_ifstream < wchar_t >
std::ofstream std:: basic_ofstream < char >
std::wofstream std:: basic_ofstream < wchar_t >
std::fstream std:: basic_fstream < char >
std::wfstream std:: basic_fstream < wchar_t >
定义于头文件 <sstream>
std::stringbuf std:: basic_stringbuf < char >
std::wstringbuf std:: basic_stringbuf < wchar_t >
std::istringstream std:: basic_istringstream < char >
std::wistringstream std:: basic_istringstream < wchar_t >
std::ostringstream std:: basic_ostringstream < char >
std::wostringstream std:: basic_ostringstream < wchar_t >
std::stringstream std:: basic_stringstream < char >
std::wstringstream std:: basic_stringstream < wchar_t >
定义于头文件 <spanstream>
std::spanbuf <span class

预定义标准流对象

定义于头文件 <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流错误码
(枚举)
标识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>
输出参数的 格式化 表示
(函数模板)
输出参数的 格式化 表示并附加 ' \n '
(函数模板)

C 风格 I/O

C++ 同样包含 C 语言定义的输入/输出函数 ,例如 std::fopen std::getc 等。

参见

文件系统库 (自 C++17 起)