Namespaces
Variants

Input/output library

From cppreference.net

C++包含以下输入/输出库:一个 OOP风格 基于流的I/O 基于打印的函数族 (自C++23起) ,以及标准集合的 C风格I/O 函数。

目录

基于流的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 中移除)
实现字符数组输入/输出操作
(类)
同步输出 (since C++20)
定义于头文件 <syncstream>
同步输出设备包装器
(类模板)
同步输出流包装器
(类模板)

Typedefs

以下针对常见字符类型的类型定义在命名空间 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 (C++23) std:: basic_spanbuf < char >
std::wspanbuf (C++23) std:: basic_spanbuf < wchar_t >
std::ispanstream (C++23) std:: basic_ispanstream < char >
std::wispanstream (C++23) std:: basic_ispanstream < wchar_t >
std::ospanstream (C++23) std:: basic_ospanstream < char >
std::wospanstream (C++23) std:: basic_ospanstream < wchar_t >
std::spanstream (C++23) std:: basic_spanstream < char >
std::wspanstream (C++23) std:: basic_spanstream < wchar_t >
定义于头文件 <syncstream>
std::syncbuf (C++20) std:: basic_syncbuf < char >
std::wsyncbuf (C++20) std:: basic_syncbuf < wchar_t >
std::osyncstream (C++20) std:: basic_osyncstream < char >
std::wosyncstream (C++20) std:: basic_osyncstream < wchar_t >

预定义标准流对象

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

C风格I/O

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

另请参阅

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