Namespaces
Variants

Input/output library

From cppreference.net

C++ включает следующие библиотеки ввода/вывода: OOP-style stream-based I/O библиотеку , print-based family функций (since C++23) , и стандартный набор C-style I/O функций.

Содержание

Потоковый ввод-вывод

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

Большинство классов являются шаблонными, поэтому они могут быть адаптированы к любому базовому символьному типу. Отдельные typedef предоставляются для наиболее распространенных базовых символьных типов ( 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 std-io-complete-inheritance.svg

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

Абстракция
Определено в заголовке <ios>
управляет флагами форматирования и исключениями ввода/вывода
(класс)
управляет произвольным буфером потока
(шаблон класса)
Определено в заголовке <streambuf>
абстрагирует необработанное устройство
(шаблон класса)
Определено в заголовке <ostream>
оборачивает заданное абстрактное устройство ( std::basic_streambuf )
и предоставляет высокоуровневый интерфейс вывода
(шаблон класса)
Определено в заголовке <istream>
оборачивает заданное абстрактное устройство ( std::basic_streambuf )
и предоставляет высокоуровневый интерфейс ввода
(шаблон класса)
оборачивает заданное абстрактное устройство ( std::basic_streambuf )
и предоставляет высокоуровневый интерфейс ввода/вывода
(шаблон класса)
Реализация файлового ввода/вывода
Определено в заголовочном файле <fstream>
реализует необработанное файловое устройство
(шаблон класса)
реализует операции высокоуровневого ввода файлового потока
(шаблон класса)
реализует операции высокоуровневого вывода в файловый поток
(шаблон класса)
реализует высокоуровневые операции ввода/вывода файлового потока
(шаблон класса)
Реализация строкового ввода-вывода
Определено в заголовочном файле <sstream>
реализует необработанное строковое устройство
(шаблон класса)
реализует операции ввода строкового потока высокого уровня
(шаблон класса)
реализует операции высокоуровневого вывода в строковый поток
(шаблон класса)
реализует высокоуровневые операции ввода/вывода для строковых потоков
(шаблон класса)
Реализации ввода-вывода массивов
Определено в заголовочном файле <spanstream>
реализует устройство необработанного фиксированного буфера символов
(шаблон класса)
реализует операции ввода из фиксированного буфера символов
(шаблон класса)
реализует операции вывода в фиксированный буфер символов
(шаблон класса)
реализует операции ввода/вывода для фиксированного буфера символов
(шаблон класса)
Определено в заголовочном файле <strstream>
(устарело в C++98) (удалено в C++26)
реализует устройство для работы с необработанным массивом символов
(класс)
(устарел в C++98) (удален в C++26)
реализует операции ввода из символьного массива
(класс)
(устарело в C++98) (удалено в C++26)
реализует операции вывода в массив символов
(класс)
(deprecated in C++98) (removed in C++26)
реализует операции ввода/вывода для массивов символов
(класс)
Синхронизированный вывод (начиная с C++20)
Определено в заголовочном файле <syncstream>
обёртка синхронизированного устройства вывода
(шаблон класса)
обёртка синхронизированного выходного потока
(шаблон класса)

Псевдонимы типов

В пространстве имен std предоставлены следующие определения типов для распространенных символьных типов:

**Примечание:** В данном фрагменте HTML не содержится переводимого текста - все элементы являются либо HTML-тегами и атрибутами, либо C++ специфическими терминами (`std::wios`, `std::basic_ios`, `wchar_t`), которые согласно требованиям не подлежат переводу. **Примечание:** В данном фрагменте HTML не содержится переводимого текста, так как: - Все элементы являются HTML-тегами и атрибутами (не подлежат переводу) - Текст внутри тегов состоит исключительно из C++ специфичных терминов (`std::wistream`, `std::basic_istream`, `wchar_t`), которые не переводятся - Весь контент находится внутри тегов форматирования кода **Примечание:** В данном фрагменте HTML: - Все HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` ` с классами `mw-geshi cpp source-cpp` не переведен, так как содержит C++ код - Названия классов C++ (`std::iostream`, `std::basic_iostream`, `char`) не переведены - Единственный переводимый элемент - атрибут `title` в теге ` ` - уже содержит технический термин, который также не требует перевода **Примечание:** В данном фрагменте HTML не содержится переводимого текста - все элементы представляют собой HTML-теги, атрибуты, C++ код и стандартные идентификаторы (std::ostream, std::basic_ostream, char), которые согласно инструкциям не подлежат переводу. **Примечание:** В данном фрагменте HTML не содержится переводимого текста - все элементы представляют собой HTML-теги, атрибуты, C++ код и стандартные идентификаторы, которые согласно требованиям не подлежат переводу. **Примечание:** В данном фрагменте HTML: - Все HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` ` с классами `mw-geshi`, `cpp`, `source-cpp` (C++ код) не переведен - C++ специфические термины (`std::filebuf`, `std::basic_filebuf`, `char`) сохранены в оригинале - Единственный переводимый элемент - атрибут `title="cpp/io/basic filebuf"` - был бы переведен, но в данном случае он также содержит технические термины, поэтому оставлен без изменений **Примечание:** В данном фрагменте HTML нет текста для перевода на русский язык, так как: - Все содержимое внутри тегов ` `, `
` и `` должно оставаться без изменений
- C++ специфические термины (`std::fstream`, `std::basic_fstream`, `char`) не переводятся
- HTML теги и атрибуты сохранены в оригинальном виде
- Единственный потенциально переводимый элемент - атрибут `title` - содержит технический путь, который также не подлежит переводу
**Примечание:** В данном фрагменте HTML не содержится переводимого текста - все элементы являются HTML-тегами, атрибутами или C++ кодом внутри тегов ` `, которые согласно инструкциям не подлежат переводу. **Примечание:** В данном фрагменте HTML не содержится переводимого текста, кроме технических терминов C++ (std::stringbuf, std::basic_stringbuf, char), которые согласно инструкции не подлежат переводу. Весь остальной текст представляет собой HTML-теги, атрибуты и код C++, которые были сохранены в оригинальном виде. **Примечание:** В данном фрагменте HTML не содержится переводимого текста, так как: - `std::wistringstream`, `std::basic_istringstream` и `wchar_t` являются терминами C++ и не подлежат переводу - Весь остальной текст представляет собой HTML-теги, атрибуты и синтаксис C++ внутри тегов ` ` **Примечание:** В данном фрагменте HTML не содержится переводимого текста, так как: - `std::ostringstream`, `std::basic_ostringstream` и `char` являются C++ терминами и не подлежат переводу - Весь остальной текст находится внутри HTML тегов и атрибутов - Форматирование полностью сохранено в оригинальном виде **Примечание:** В данном фрагменте HTML нет текста для перевода, требующего локализации на русский язык. Все содержимое состоит из: - HTML тегов и атрибутов (не подлежат переводу) - C++ специфичных терминов (`std::stringstream`, `std::basic_stringstream`, `char` - не подлежат переводу) - Символов форматирования (`<`, `>` - не подлежат переводу) Единственный элемент, который мог бы требовать перевода - это атрибут `title`, но он содержит техническую ссылку на документацию C++, которая также не переводится. **Примечание:** В данном случае весь текст уже состоит из C++ специфичных терминов, HTML тегов и атрибутов, которые не подлежат переводу согласно вашим требованиям. Единственный элемент, который мог бы быть переведен - это "(C++23)", но он является стандартной маркировкой версии C++ и также должен оставаться без изменений для сохранения технической точности. **Примечание:** В данном фрагменте HTML все текстовые элементы уже являются C++ специфичными терминами (`std::wospanstream`, `std::basic_ospanstream`, `wchar_t`) или техническими обозначениями (`C++23`), которые не подлежат переводу согласно требованиям. Поэтому перевод не требуется, исходный текст сохранен без изменений. **Примечание:** В данном случае весь текст уже является C++ специфичными терминами и кодом, поэтому перевод не требуется. HTML структура и форматирование полностью сохранены.
Тип Определение
Определено в заголовочном файле <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)
коды ошибок потокового ввода-вывода
(перечисление)
идентифицирует категорию ошибок 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>
выводит форматированное представление аргументов
(шаблон функции)
выводит форматированное представление аргументов с добавленным ' \n '
(шаблон функции)

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

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

Смотрите также

Библиотека файловой системы (начиная с C++17)