# 输入/输出库

< cpp

C++ 包含两个输入/输出库：现代的、基于流的 I/O 库和 C 风格 I/O 函数的标准集合。

### 基于流的 I/O

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

大多数已经被类模板化，故它们能被适配到任何标准字符类型。为最常用的基本字符类型（ char 和 wchar_t ）提供分离的 typedef 。以下列层次将类组织：

继承图

##### 抽象
定义于头文件 `<ios>`
ios_base | 管理格式化标志和输入/输出异常 (类)
basic_ios | 管理任意流缓冲 (类模板)
定义于头文件 `<streambuf>`
basic_streambuf | 抽象原生设备 (类模板)
定义于头文件 `<ostream>`
basic_ostream | 包装给定的抽象设备（std::basic_streambuf） 并提供高层输出接口 (类模板)
定义于头文件 `<istream>`
basic_istream | 包装给定的抽象设备（std::basic_streambuf） 并提供高层输入接口 (类模板)
basic_iostream | 包装给定的抽象设备（std::basic_streambuf） 并提供高层输入/输出接口 (类模板)
##### 文件 I/O 实现
定义于头文件 `<fstream>`
basic_filebuf | 抽象原生文件设备 (类模板)
basic_ifstream | 实现高层文件流输入操作 (类模板)
basic_ofstream | 实现高层文件流输出操作 (类模板)
basic_fstream | 实现高层文件流输入/输出操作 (类模板)
##### 字符串 I/O 实现
定义于头文件 `<sstream>`
basic_stringbuf | 实现原生字符串设备 (类模板)
basic_istringstream | 实现高层字符串流输入操作 (类模板)
basic_ostringstream | 实现高层字符串流输出操作 (类模板)
basic_stringstream | 实现高层字符串流输入/输出操作 (类模板)
##### 数组 I/O 实现
定义于头文件 `<spanstream>`
basic_spanbuf (C++23) | 实现原始固定字符缓冲区设备 (类模板)
basic_ispanstream (C++23) | 实现固定字符缓冲区输入操作 (类模板)
basic_ospanstream (C++23) | 实现固定字符缓冲区输出操作 (类模板)
basic_spanstream (C++23) | 实现固定字符缓冲区输入/输出操作 (类模板)
定义于头文件 `<strstream>`
strstreambuf (C++98 中弃用) | 实现原生字符数组设备 (类)
istrstream (C++98 中弃用) | 实现字符数组输入操作 (类)
ostrstream (C++98 中弃用) | 实现字符数组输出操作 (类)
strstream (C++98 中弃用) | 实现字符数组输入/输出操作 (类)
##### 同步的输出
定义于头文件 `<syncstream>`
basic_syncbuf (C++20) | 同步输出设备的包装 (类模板)
basic_osyncstream (C++20) | 同步输出流的包装 (类模板)

#### typedef

提供对常用字符类型的下列 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>`
cin wcin | 从标准 C 输入流 stdin 中读取 (全局对象)
cout wcout | 写入到标准 C 输出流 stdout (全局对象)
cerr wcerr | 写入到标准 C 错误流 stderr， 无缓冲 (全局对象)
clog wclog | 写入到标准 C 错误流 stderr (全局对象)

#### I/O 操纵符

基于流的 I/O 库用 I/O 操纵符（例如 std::boolalpha 、 std::hex 等）控制流的行为。

#### 类型

定义下列辅助类型：

定义于头文件 `<ios>`
streamoff | 表示相对的文件/流位置（距 fpos 的偏移），足以表示任何文件大小 (typedef)
streamsize | 表示一次 I/O 操作中转移的字符数或 I/O 缓冲区的大小 (typedef)
fpos | 表示流或文件中的绝对位置 (类模板)

提供下列 std::fpos<std::mbstate_t> 的 typedef 名：

定义于头文件 `<iosfwd>`
Type | Definition
`streampos` | std::fpos<std::char_traits<char>::state_type>
`wstreampos` | std::fpos<std::char_traits<wchar_t>::state_type>
`u8streampos` (C++20) | std::fpos<std::char_traits<char8_t>::state_type>
`u16streampos` (C++11) | std::fpos<std::char_traits<char16_t>::state_type>
`u32streampos` (C++11) | std::fpos<std::char_traits<char32_t>::state_type>

#### 错误类别接口

定义于头文件 `<ios>`
io_errc (C++11) | IO 流的错误码 (枚举)
iostream_category (C++11) | 鉴别 iostream 错误类别 (函数)

### C 风格 I/O

C++ 亦包含 C 所定义的输入/输出函数，如 std::fopen 、 std::getc 等。