输入/输出库

来自cppreference.com
< cpp

C++ 包含如下的输入/输出库:OOP-风格的基于流的输入/输出基于打印的函数族 (C++23 起)、以及C 风格输入/输出函数的标准集合。


基于流的输入/输出

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

大多数已经被类模板化,故它们能被适配到任何标准字符类型。为最常用的基本字符类型(charwchar_t)提供分离的 typedef。以下列层次将类组织:

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
并提供高层输入/输出接口
(类模板)
文件输入/输出实现
在标头 <fstream> 定义
抽象原生文件设备
(类模板)
实现高层文件流输入操作
(类模板)
实现高层文件流输出操作
(类模板)
实现高层文件流输入/输出操作
(类模板)
字符串输入/输出实现
在标头 <sstream> 定义
实现原生字符串设备
(类模板)
实现高层字符串流输入操作
(类模板)
实现高层字符串流输出操作
(类模板)
实现高层字符串流输入/输出操作
(类模板)
数组输入/输出实现
在标头 <spanstream> 定义
实现原始固定字符缓冲区设备
(类模板)
实现固定字符缓冲区输入操作
(类模板)
实现固定字符缓冲区输出操作
(类模板)
实现固定字符缓冲区输入/输出操作
(类模板)
在标头 <strstream> 定义
(C++98 中弃用)
实现原生字符数组设备
(类)
(C++98 中弃用)
实现字符数组输入操作
(类)
(C++98 中弃用)
实现字符数组输出操作
(类)
(C++98 中弃用)
实现字符数组输入/输出操作
(类)
同步的输出
在标头 <syncstream> 定义
同步输出设备的包装
(类模板)
同步输出流的包装
(类模板)

typedef

std 命名空间提供对常用字符类型的下列 typedef:

typedef basic_ios<char>                ios;
typedef basic_ios<wchar_t>            wios;
 
typedef basic_streambuf<char>     streambuf;
typedef basic_streambuf<wchar_t> wstreambuf;
typedef basic_filebuf<char>         filebuf;
typedef basic_filebuf<wchar_t>     wfilebuf;
typedef basic_stringbuf<char>     stringbuf;
typedef basic_stringbuf<wchar_t> wstringbuf;
typedef basic_syncbuf<char>         syncbuf; // C++20
typedef basic_syncbuf<wchar_t>     wsyncbuf; // C++20
typedef basic_spanbuf<char>         spanbuf; // C++23
typedef basic_spanbuf<wchar_t>     wspanbuf; // C++23
 
typedef basic_istream<char>         istream;
typedef basic_istream<wchar_t>     wistream;
typedef basic_ostream<char>         ostream;
typedef basic_ostream<wchar_t>     wostream;
typedef basic_iostream<char>       iostream;
typedef basic_iostream<wchar_t>   wiostream;
 
typedef basic_ifstream<char>       ifstream;
typedef basic_ifstream<wchar_t>   wifstream;
typedef basic_ofstream<char>       ofstream;
typedef basic_ofstream<wchar_t>   wofstream;
typedef basic_fstream<char>         fstream;
typedef basic_fstream<wchar_t>     wfstream;
 
typedef basic_istringstream<char>     istringstream;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<char>     ostringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<char>       stringstream;
typedef basic_stringstream<wchar_t>   wstringstream;
 
typedef basic_osyncstream<char>     osyncstream; // C++20
typedef basic_osyncstream<wchar_t> wosyncstream; // C++20
 
typedef basic_ispanstream<char>     ispanstream; // C++23
typedef basic_ispanstream<wchar_t> wispanstream; // C++23
typedef basic_ospanstream<char>     ospanstream; // C++23
typedef basic_ospanstream<wchar_t> wospanstream; // C++23
typedef basic_spanstream<char>       spanstream; // C++23
typedef basic_spanstream<wchar_t>   wspanstream; // C++23

预定义标准流对象

在标头 <iostream> 定义
从标准 C 输入流 stdin 中读取
(全局对象)
写入到标准 C 输出流 stdout
(全局对象)
写入到标准 C 错误流 stderr,无缓冲
(全局对象)
写入到标准 C 错误流 stderr
(全局对象)

输入/输出操纵符

基于流的输入/输出库用 输入/输出操纵符(例如 std::boolalphastd::hex 等)控制流的行为。

类型

定义下列辅助类型:

在标头 <ios> 定义
表示相对的文件/流位置(距 fpos 的偏移),足以表示任何文件大小
(typedef)
表示一次输入/输出操作中转移的字符数或输入/输出缓冲区的大小
(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>

错误类别接口

在标头 <ios> 定义
(C++11)
输入/输出流的错误码
(枚举)
鉴别 iostream 错误类别
(函数)

打印函数 (C++23 起)

对Unicode编码的格式化文本提供输入输出支持的print族函数。这些函数拥有 std::format 带来的性能优势,默认情况下与本地环境无关;减少使用全局状态,同时避免 operator<< 调用和申请临时的 std::string 对象。一般情况下比 iostreamsstdio 更高效。

标准库提供了如下print族函数:

在标头 <print> 定义
(C++23)
将参数的 格式化 表达输出到 stdout 或文件缓冲区
(函数模板)
(C++23)
将参数的 格式化 表达输出到 stdout 或文件缓冲区,输出完成后换行
(函数模板)
使用类型擦除的参数表示,打印到支持Unicode的stdout或文件流
(函数)
使用类型擦除的参数表示,打印到stdout或文件流
(函数)


C 风格输入/输出

C++ 也包含了 C 所定义的输入/输出函数,如 std::fopenstd::getc 等。