命名空间
变体
操作

输入/输出库

来自 cppreference.com
< cpp

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

内容

[编辑] 基于流的 I/O

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

大多数类都是模板化的,因此它们可以适应任何基本字符类型。为最常见的基本字符类型(charwchar_t)提供了单独的类型定义。这些类按以下层次结构组织

cpp/io/ios basecpp/io/basic ioscpp/io/basic istreamcpp/io/basic ifstreamcpp/io/basic istringstreamcpp/io/basic ostreamcpp/io/basic ofstreamcpp/io/basic ostringstreamcpp/io/basic fstreamcpp/io/basic stringstreamcpp/io/basic iostreamstd-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 中已删除)
实现字符数组输入/输出操作
(类) [编辑]
同步输出
定义在头文件 <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 (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::boolalphastd::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 流错误代码
(枚举) [edit]
标识 IO 流错误类别
(函数) [edit]

[edit] 打印函数 (自 C++23 起)

这些支持 Unicode 的打印函数族执行对已格式化文本的格式化 I/O。它们带来了 std::format 的所有性能优势,默认情况下独立于区域设置,减少全局状态,避免分配临时 std::string 对象并调用 operator<<,总的来说,与 iostreamsstdio 相比,它们使格式化更加高效。

提供以下类似打印的函数

定义在头文件 <print>
(C++23)
使用参数的 格式化 表示打印到 stdout 或文件流
(函数模板) [edit]
(C++23)
std::print 相同,只是每次打印都以额外的换行符结尾
(函数模板) [edit]
使用 类型擦除 的参数表示打印到支持 Unicode 的 stdout 或文件流
(函数) [edit]
使用 类型擦除 的参数表示打印到 stdout 或文件流
(函数) [edit]
 
定义在头文件 <ostream>
输出参数的 格式化 表示
(函数模板) [edit]
输出参数的 格式化 表示,并在后面附加 '\n'
(函数模板) [edit]

[edit] C 风格 I/O

C++ 还包括由 C 定义的 输入/输出函数,例如 std::fopenstd::getc 等。

[edit] 另请参阅

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