Библиотека ввода/вывода
C++ включает следующие библиотеки ввода/вывода: Стиль ООП потоковую библиотеку ввода/вывода , семейство основанных на print функций (начиная с 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++98) |
реализует операции ввода массива символов (класс) |
| (устарело в C++98) |
реализует операции вывода массива символов (класс) |
| (устарело в C++98) |
реализует операции ввода/вывода массива символов (класс) |
Синхронизированный вывод | |
| Определены в заголовочном файле
<syncstream> | |
| (C++20) |
оболочка синхронизированного устройства вывода (шаблон класса) |
| (C++20) |
оболочка синхронизированного потока вывода (шаблон класса) |
[править] Определения типов
Предоставляются следующие определения типов для общих типов символов в пространстве имён std:
[править] Предопределённые стандартные потоковые объекты
| Определены в заголовочном файле
<iostream> | |
| читает из стандартного входного потока C stdin (глобальный объект) | |
| пишет в стандартный выходной поток C stdout (глобальный объект) | |
| пишет в стандартный поток ошибок C stderr, небуферизирована (глобальный объект) | |
| пишет в стандартный поток ошибок C stderr (глобальный объект) | |
[править] Манипуляторы ввода/вывода
Библиотека потокового ввода-вывода использует манипуляторы ввода/вывода (например, std::boolalpha, std::hex и т.д.) для управления поведением потоков.
[править] Типы
Определены следующие вспомогательные типы:
| Определены в заголовочном файле
<ios> | |
| представляет относительную позицию файла/потока (смещение от fpos), достаточную для представления любого размера файла (определение типа) | |
| представляет количество символов, переданных в операции ввода/вывода, или размер буфера ввода/вывода (определение типа) | |
| представляет абсолютную позицию в потоке или файле (шаблон класса) | |
Предоставляются следующие typedef имена для 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> |
[править] Интерфейс категорий ошибок
| Определены в заголовочном файле
<ios> | |
| (C++11) |
коды ошибок потока ввода/вывода (перечисление) |
| (C++11) |
определяет категорию ошибок iostream (функция) |
[править] Функции print (начиная с C++23)
Функции семейства print с поддержкой Юникода, которые выполняют форматированный ввод-вывод для уже отформатированного текста. Они обладают всеми преимуществами производительности std::format, по умолчанию не зависят от региональных настроек, уменьшают глобальное состояние, избегают выделения временного объекта std::string и вызова operator<< и в целом делают форматирование более эффективным по сравнению с iostreams и stdio.
Предусмотрены следующие функции, подобные print:
| Определены в заголовочном файле
<print> | |
| (C++23) |
печатает в stdout или в файловый поток, используя форматированное представление аргументов (шаблон функции) |
| (C++23) |
то же, что и std::print, за исключением того, что каждая печать заканчивается дополнительной новой строкой (шаблон функции) |
| (C++23) |
печатает в stdout или в файловый поток с поддержкой Юникода, используя представление аргумента со стёртым типом (функция) |
| (C++23) |
печатает в stdout или в файловый поток, используя представление аргумента со стёртым типом (функция) |
[править] Ввод/вывод в стиле C
C++ также включает в себя функции ввода/вывода, определённые в C, такие как std::fopen, std::getc и т.д.

