Spec-Zone.ru › C++

Библиотека ввода-вывода

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

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

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

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

cpp/io/ios base cpp/io/basic ios cpp/io/basic istream cpp/io/basic ifstream cpp/io/basic istringstream cpp/io/basic ostream cpp/io/basic ofstream cpp/io/basic ostringstream cpp/io/basic fstream cpp/io/basic stringstream cpp/io/basic iostream

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

Абстракция
Определён в заголовке <ios>
ios_base
управляет флагами форматирования и исключениями ввода-вывода
(класс)
basic_ios
управляет произвольным буфером потока
(шаблон класса)
Определён в заголовке <streambuf>
basic_streambuf
абстрагирует низкоуровневое устройство
(шаблон класса)
Определён в заголовке <ostream>
basic_ostream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет высокоуровневый интерфейс вывода
(шаблон класса)
Определён в заголовке <istream>
basic_istream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет высокоуровневый интерфейс ввода
(шаблон класса)
basic_iostream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет высокоуровневый интерфейс ввода-вывода
(шаблон класса)
Реализация файлового ввода-вывода
Определён в заголовке <fstream>
basic_filebuf
реализует низкоуровневое файловое устройство
(шаблон класса)
basic_ifstream
реализует высокоуровневые операции ввода из файлового потока
(шаблон класса)
basic_ofstream
реализует высокоуровневые операции вывода в файловый поток
(шаблон класса)
basic_fstream
реализует высокоуровневые операции ввода-вывода файлового потока
(шаблон класса)
Реализация ввода-вывода строк
Определён в заголовке <sstream>
basic_stringbuf
реализует низкоуровневое строковое устройство
(шаблон класса)
basic_istringstream
реализует высокоуровневые операции ввода из строкового потока
(шаблон класса)
basic_ostringstream
реализует высокоуровневые операции вывода в строковый поток
(шаблон класса)
basic_stringstream
реализует высокоуровневые операции ввода-вывода строкового потока
(шаблон класса)
Реализации ввода-вывода массивов
Определён в заголовке <spanstream>
basic_spanbuf
(C++23)
реализует низкоуровневое устройство с фиксированным буфером символов
(шаблон класса)
basic_ispanstream
(C++23)
реализует операции ввода из буфера символов фиксированного размера
(шаблон класса)
basic_ospanstream
(C++23)
реализует операции вывода в буфер символов фиксированного размера
(шаблон класса)
basic_spanstream
(C++23)
реализует операции ввода-вывода буфера символов фиксированного размера
(шаблон класса)
Определён в заголовке <strstream>
strstreambuf
(устарел в C++98)(удалён в C++26)
реализует низкоуровневое устройство на основе массива символов
(класс)
istrstream
(устарел в C++98)(удалён в C++26)
реализует операции ввода из массива символов
(класс)
ostrstream
(устарел в C++98)(удалён в C++26)
реализует операции вывода в массив символов
(класс)
strstream
(устарел в C++98)(удалён в C++26)
реализует операции ввода-вывода массива символов
(класс)
Синхронизированный вывод (начиная с C++20)
Определён в заголовке <syncstream>
basic_syncbuf
(C++20)
обёртка устройства синхронизированного вывода
(шаблон класса)
basic_osyncstream
(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>
cinwcin
читает из стандартного потока ввода C stdin
(глобальный объект)
coutwcout
записывает в стандартный поток вывода C stdout
(глобальный объект)
cerrwcerr
записывает в стандартный поток ошибок C stderr без буферизации
(глобальный объект)
clogwclog
записывает в стандартный поток ошибок C stderr
(глобальный объект)

Манипуляторы ввода-вывода

Библиотека ввода-вывода на основе потоков использует манипуляторы ввода-вывода (например, std::boolalpha, std::hex и т. д.) для управления поведением потоков.

Типы

Определены следующие вспомогательные типы:

Определён в заголовке <ios>
streamoff
представляет относительную позицию в файле/потоке (смещение от fpos), достаточную для представления размера любого файла
(псевдоним типа)
streamsize
представляет количество символов, переданных в операции ввода-вывода, или размер буфера ввода-вывода
(псевдоним типа)
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>
io_errc
(C++11)
коды ошибок потоков ввода-вывода
(перечисление)
iostream_category
(C++11)
идентифицирует категорию ошибок iostream
(функция)

Функции вывода (начиная с C++23)

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

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

Определено в заголовочном файле <print>
print
(C++23)
выводит данные в stdout или файловый поток, используя форматированное представление аргументов
(шаблон функции)
println
(C++23)
то же, что std::print, за исключением того, что после каждого вывода добавляется новая строка
(шаблон функции)
vprint_unicodevprint_unicode_buffered
(C++23)
выводит данные в stdout с поддержкой Unicode или файловый поток, используя представление аргументов со стиранием типа
(функция)
vprint_nonunicodevprint_nonunicode_buffered
(C++23)
выводит данные в stdout или файловый поток, используя представление аргументов со стиранием типа
(функция)
Определено в заголовочном файле <ostream>
print(std::ostream)
(C++23)
выводит форматированное представление аргументов
(шаблон функции)
println(std::ostream)
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API