Библиотека ввода/вывода
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:
| Тип | Определение |
Определены в заголовочном файле
<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), достаточную для представления любого размера файла (определение типа) | |
| представляет количество символов, переданных в операции ввода/вывода, или размер буфера ввода/вывода (определение типа) | |
| представляет абсолютную позицию в потоке или файле (шаблон класса) | |
Предоставляются следующие 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 и т.д.