◐ Shell
clean mode source ↗

Библиотека ввода/вывода — cppreference.com

C++ включает следующие библиотеки ввода/вывода: Стиль ООП потоковую библиотеку ввода/вывода , семейство основанных на print функций (начиная с C++23) и стандартный набор функций ввод-вывод в стиле C.

Ввод/вывод на основе потоков

Библиотека потокового ввода/вывода организована вокруг абстрактных устройств ввода/вывода. Эти абстрактные устройства позволяют одному и тому же коду обрабатывать ввод/вывод в файлы, потоки памяти или пользовательские адаптеры устройств, которые выполняют произвольные операции (например, сжатие) на лету.

Большинство классов являются шаблонными, поэтому их можно адаптировать к любому базовому типу символов. Для наиболее распространённых основных типов символов (char и wchar_t) предоставляются отдельные определения типов. Классы организованы в следующую иерархию:

cpp/io/ios basecpp/io/basic ioscpp/io/basic istreamcpp/io/basic ifstreamcpp/io/basic istringstreamcpp/io/basic ostreamcpp/io/basic ofstreamcpp/io/basic ostringstreamcpp/io/basic fstreamcpp/io/basic stringstreamcpp/io/basic iostream

Диаграмма наследования

Абстракции

Определены в заголовочном файле <ios>

управляет флагами форматирования и исключениями ввода/вывода
(класс) [править]
управляет произвольным буфером потока
(шаблон класса) [править]

Определены в заголовочном файле <streambuf>

абстрагирует необработанное устройство
(шаблон класса) [править]

Определены в заголовочном файле <ostream>

обёртывает данное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс вывода высокого уровня
(шаблон класса) [править]

Определены в заголовочном файле <istream>

обёртывает данное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс ввода высокого уровня
(шаблон класса) [править]
обёртывает данное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс ввода/вывода высокого уровня
(шаблон класса) [править]
Реализация файлового ввода/вывода

Определены в заголовочном файле <fstream>

реализует необработанное файловое устройство
(шаблон класса) [править]
реализует высокоуровневые операции ввода файлового потока
(шаблон класса) [править]
реализует высокоуровневые операции вывода файлового потока
(шаблон класса) [править]
реализует высокоуровневые операции ввода/вывода файлового потока
(шаблон класса) [править]
Реализация строкового ввода/вывода

Определены в заголовочном файле <sstream>

реализует необработанное строковое устройство
(шаблон класса) [править]
реализует высокоуровневые операции ввода строкового потока
(шаблон класса) [править]
реализует высокоуровневые операции вывода строкового потока
(шаблон класса) [править]
реализует высокоуровневые операции ввода/вывода строкового потока
(шаблон класса) [править]
Реализации ввода/вывода массивов

Определены в заголовочном файле <spanstream>

реализует сырое фиксированное устройство буфера символов
(шаблон класса) [править]
реализует операции ввода фиксированного символьного буфера
(шаблон класса) [править]
реализует операции вывода фиксированного символьного буфера
(шаблон класса) [править]
реализует операции ввода/вывода с фиксированным символьным буфером
(шаблон класса) [править]

Определены в заголовочном файле <strstream>

(устарело в C++98)

реализует необработанное устройство массива символов
(класс) [править]

(устарело в C++98)

реализует операции ввода массива символов
(класс) [править]

(устарело в C++98)

реализует операции вывода массива символов
(класс) [править]

(устарело в C++98)

реализует операции ввода/вывода массива символов
(класс) [править]
Синхронизированный вывод

Определены в заголовочном файле <syncstream>

оболочка синхронизированного устройства вывода
(шаблон класса) [править]
оболочка синхронизированного потока вывода
(шаблон класса) [править]

Определения типов

Предоставляются следующие определения типов для общих типов символов в пространстве имён 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>

Интерфейс категорий ошибок

Функции print (начиная с C++23)

Функции семейства print с поддержкой Юникода, которые выполняют форматированный ввод-вывод для уже отформатированного текста. Они обладают всеми преимуществами производительности std::format, по умолчанию не зависят от региональных настроек, уменьшают глобальное состояние, избегают выделения временного объекта std::string и вызова operator<< и в целом делают форматирование более эффективным по сравнению с iostreams и stdio.

Предусмотрены следующие функции, подобные print:

Определены в заголовочном файле <print>

печатает в stdout или в файловый поток, используя форматированное представление аргументов
(шаблон функции) [править]
то же, что и std::print, за исключением того, что каждая печать заканчивается дополнительной новой строкой
(шаблон функции) [править]
печатает в stdout или в файловый поток с поддержкой Юникода, используя представление аргумента со стёртым типом
(функция) [править]
печатает в stdout или в файловый поток, используя представление аргумента со стёртым типом
(функция) [править]

Ввод/вывод в стиле C

C++ также включает в себя функции ввода/вывода, определённые в C, такие как std::fopen, std::getc и т.д.