Библиотека ввода-вывода
C++ включает следующие библиотеки ввода-вывода: библиотеку в стиле ООП, основанную на потоках, набор функций для вывода(начиная с C++23), а также стандартный набор функций ввода-вывода в стиле C.
Ввод-вывод на основе потоков
Библиотека ввода-вывода на основе потоков организована вокруг абстрактных устройств ввода-вывода. Эти абстрактные устройства позволяют одному и тому же коду выполнять ввод-вывод в файлы, потоки памяти или пользовательские устройства-адаптеры, которые на лету выполняют произвольные операции (например, сжатие).
Большинство классов являются шаблонными, поэтому их можно адаптировать к любому базовому типу символов. Для наиболее распространённых базовых типов символов (char и wchar_t) предусмотрены отдельные псевдонимы типов. Классы организованы в следующую иерархию:
Диаграмма наследования
Абстракция |
|
Определён в заголовке <ios> |
|
|---|---|
| управляет флагами форматирования и исключениями ввода-вывода (класс) |
|
| управляет произвольным буфером потока (шаблон класса) |
|
Определён в заголовке <streambuf> |
|
| абстрагирует низкоуровневое устройство (шаблон класса) |
|
Определён в заголовке <ostream> |
|
оборачивает заданное абстрактное устройство (std::basic_streambuf)и предоставляет высокоуровневый интерфейс вывода (шаблон класса) |
|
Определён в заголовке <istream> |
|
оборачивает заданное абстрактное устройство (std::basic_streambuf)и предоставляет высокоуровневый интерфейс ввода (шаблон класса) |
|
оборачивает заданное абстрактное устройство (std::basic_streambuf)и предоставляет высокоуровневый интерфейс ввода-вывода (шаблон класса) |
|
Реализация файлового ввода-вывода |
|
Определён в заголовке <fstream> |
|
| реализует низкоуровневое файловое устройство (шаблон класса) |
|
| реализует высокоуровневые операции ввода из файлового потока (шаблон класса) |
|
| реализует высокоуровневые операции вывода в файловый поток (шаблон класса) |
|
| реализует высокоуровневые операции ввода-вывода файлового потока (шаблон класса) |
|
Реализация ввода-вывода строк |
|
Определён в заголовке <sstream> |
|
| реализует низкоуровневое строковое устройство (шаблон класса) |
|
| реализует высокоуровневые операции ввода из строкового потока (шаблон класса) |
|
| реализует высокоуровневые операции вывода в строковый поток (шаблон класса) |
|
| реализует высокоуровневые операции ввода-вывода строкового потока (шаблон класса) |
|
Реализации ввода-вывода массивов |
|
Определён в заголовке <spanstream> |
|
|
(C++23) | реализует низкоуровневое устройство с фиксированным буфером символов (шаблон класса) |
|
(C++23) | реализует операции ввода из буфера символов фиксированного размера (шаблон класса) |
|
(C++23) | реализует операции вывода в буфер символов фиксированного размера (шаблон класса) |
|
(C++23) | реализует операции ввода-вывода буфера символов фиксированного размера (шаблон класса) |
Определён в заголовке <strstream> |
|
|
(устарел в C++98)(удалён в C++26) | реализует низкоуровневое устройство на основе массива символов (класс) |
|
(устарел в C++98)(удалён в C++26) | реализует операции ввода из массива символов (класс) |
|
(устарел в C++98)(удалён в C++26) | реализует операции вывода в массив символов (класс) |
|
(устарел в C++98)(удалён в C++26) | реализует операции ввода-вывода массива символов (класс) |
Синхронизированный вывод (начиная с C++20) |
|
Определён в заголовке <syncstream> |
|
|
(C++20) | обёртка устройства синхронизированного вывода (шаблон класса) |
|
(C++20) | обёртка потока синхронизированного вывода (шаблон класса) |
Псевдонимы типов
В пространстве имён 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(глобальный объект) |
|
Манипуляторы ввода-вывода
Библиотека ввода-вывода на основе потоков использует манипуляторы ввода-вывода (например, std::boolalpha, std::hex и т. д.) для управления поведением потоков.
Типы
Определены следующие вспомогательные типы:
Определён в заголовке <ios> |
|
|---|---|
| представляет относительную позицию в файле/потоке (смещение от fpos), достаточную для представления размера любого файла (псевдоним типа) |
|
| представляет количество символов, переданных в операции ввода-вывода, или размер буфера ввода-вывода (псевдоним типа) |
|
| представляет абсолютную позицию в потоке или файле (шаблон класса) |
|
Предусмотрены следующие имена псевдонимов типов для 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> |
Интерфейс категории ошибок (начиная с C++11)
Определён в заголовке <ios> |
|
|---|---|
|
(C++11) | коды ошибок потоков ввода-вывода (перечисление) |
|
(C++11) | идентифицирует категорию ошибок iostream (функция) |
Функции вывода (начиная с C++23)
Функции семейства вывода с поддержкой Unicode выполняют форматированный ввод-вывод текста, который уже отформатирован. Они обеспечивают все преимущества в производительности std::format, по умолчанию не зависят от локали, сокращают использование глобального состояния, позволяют избежать выделения временного объекта std::string и вызова operator<<, а в целом делают форматирование эффективнее по сравнению с iostream и stdio.
Предусмотрены следующие функции, подобные функциям вывода:
Определено в заголовочном файле <print> |
|
|---|---|
|
(C++23) | выводит данные в stdout или файловый поток, используя форматированное представление аргументов (шаблон функции) |
|
(C++23) | то же, что std::print, за исключением того, что после каждого вывода добавляется новая строка (шаблон функции) |
|
(C++23) | выводит данные в stdout с поддержкой Unicode или файловый поток, используя представление аргументов со стиранием типа (функция) |
|
(C++23) | выводит данные в stdout или файловый поток, используя представление аргументов со стиранием типа (функция) |
Определено в заголовочном файле <ostream> |
|
|
(C++23) | выводит форматированное представление аргументов (шаблон функции) |
|
(C++23) | выводит форматированное представление аргументов с добавлением '\n' (шаблон функции) |
Ввод-вывод в стиле C
C++ также включает функции ввода-вывода, определённые в C, такие как std::fopen, std::getc и т. д.
См. также
| Библиотека файловой системы (начиная с C++17) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io