Библиотека ввода/вывода
C++ включает следующие библиотеки ввода/вывода: библиотеку ввода/вывода на основе потоков стиля OOP на основе потоков, семейство функций печати(с 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 предоставлены следующие типы-псевдонимы для распространенных типов символов:
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(глобальный объект) |
|
Операторы манипуляции I/O
Библиотека ввода-вывода на основе потоков использует операторы манипуляции I/O (например, std::boolalpha, std::hex, и т.д.) для управления поведением потоков.
Типы
Определены следующие вспомогательные типы:
Определено в заголовке <ios> |
|
|---|---|
| представляет относительную позицию файла/потока (смещение от fpos), достаточно для представления любого размера файла (typedef) |
|
| представляет количество символов, переданных в операции ввода-вывода, или размер буфера ввода-вывода (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 (функция) |
Функции вывода (с C++23)
Функции вывода Unicode-совместимой семьи, выполняющие форматированный ввод-вывод на уже отформатированных текстах. Они приносят все преимущества производительности std::format, по умолчанию не зависят от локали, уменьшают глобальное состояние, избегают выделения временного std::string объекта и вызова operator<<, и в целом делают форматирование более эффективным по сравнению с потоками iostream и stdio.
Предоставлены следующие функции, похожие на функции вывода:
Определено в заголовке <print> |
|
|---|---|
|
(C++23) | выводит в stdout или в поток файла с использованием форматированного представления аргументов (шаблон функции) |
|
(C++23) | аналогично std::print за исключением того, что каждый вывод завершается дополнительной новой строкой (шаблон функции) |
|
(C++23) | выводит в Unicode-совместимый stdout или в поток файла с использованием типобезопасного представления аргументов (функция) |
|
(C++23) | выводит в stdout или в поток файла с использованием типобезопасного представления аргументов (функция) |
Определено в заголовке <ostream> |
|
|
(C++23) | выводит форматированное представление аргументов (шаблон функции) |
|
(C++23) | выводит форматированное представление аргументов с добавленной '\n' (шаблон функции) |
Ввод/вывод в стиле C
В C++ также включены функции ввода/вывода, определенные в C, такие как std::fopen, std::getc, и т. д.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io