Input/output library
C++ включает следующие библиотеки ввода/вывода: OOP-style stream-based I/O библиотеку , print-based family функций (since C++23) , и стандартный набор C-style I/O функций.
Потоковый ввод-вывод
Библиотека потокового ввода/вывода организована вокруг абстрактных устройств ввода/вывода. Эти абстрактные устройства позволяют одному и тому же коду обрабатывать ввод/вывод в файлы, потоки памяти или пользовательские адаптерные устройства, выполняющие произвольные операции (например, сжатие) на лету.
Большинство классов являются шаблонными, поэтому они могут быть адаптированы к любому базовому символьному типу. Отдельные typedef предоставляются для наиболее распространенных базовых символьных типов ( 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++26)
|
реализует устройство для работы с необработанным массивом символов
(класс) |
|
(устарел в C++98)
(удален в C++26)
|
реализует операции ввода из символьного массива
(класс) |
|
(устарело в C++98)
(удалено в C++26)
|
реализует операции вывода в массив символов
(класс) |
|
(deprecated in C++98)
(removed in C++26)
|
реализует операции ввода/вывода для массивов символов
(класс) |
Синхронизированный вывод (начиная с C++20) |
|
|
Определено в заголовочном файле
<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) |
|
|
представляет количество символов, переданных в операции ввода-вывода, или размер буфера ввода-вывода
(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 > |
Интерфейс категории ошибок (since C++11)
|
Определено в заголовке
<ios>
|
|
|
(C++11)
|
коды ошибок потокового ввода-вывода
(перечисление) |
|
(C++11)
|
идентифицирует категорию ошибок iostream
(функция) |
Функции вывода (since C++23)
Юникод-совместимые функции семейства print, которые выполняют форматированный ввод-вывод для уже отформатированного текста. Они предоставляют все преимущества производительности std::format , по умолчанию независимы от локали, сокращают использование глобального состояния, избегают создания временного объекта std::string и вызова operator << , и в целом делают форматирование более эффективным по сравнению с iostreams и stdio .
Предоставляются следующие функции, аналогичные функциям вывода:
|
Определено в заголовочном файле
<print>
|
|
|
(C++23)
|
выводит в
stdout
или файловый поток, используя
форматированное
представление аргументов
(шаблон функции) |
|
(C++23)
|
то же, что
std::print
, но каждое выводимое сообщение завершается дополнительным символом новой строки
(шаблон функции) |
|
выводит в поддерживающий Unicode
stdout
или файловый поток, используя
type-erased
представление аргументов
(функция) |
|
|
выводит в
stdout
или файловый поток, используя
type-erased
представление аргументов
(функция) |
|
|
Определено в заголовочном файле
<ostream>
|
|
|
(C++23)
|
выводит
форматированное
представление аргументов
(шаблон функции) |
|
(C++23)
|
выводит
форматированное
представление аргументов с добавленным
'
\n
'
(шаблон функции) |
Ввод-вывод в стиле C
C++ также включает функции ввода/вывода, определённые в C , такие как std::fopen , std::getc и другие.
Смотрите также
| Библиотека файловой системы (начиная с C++17) |