Библиотека ввода/вывода
C++ включает в себя две библиотеки ввода/вывода: ООП стиля потоковую библиотеку ввода/вывода и стандартный набор функций ввода/вывода в стиле 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) |
оболочка синхронизированного потока вывода (шаблон класса) |
[править] Определения типов
Предоставляются следующие определения типов для общих типов символов:
typedef basic_ios<char> ios; typedef basic_ios<wchar_t> wios; typedef basic_streambuf<char> streambuf; typedef basic_streambuf<wchar_t> wstreambuf; typedef basic_filebuf<char> filebuf; typedef basic_filebuf<wchar_t> wfilebuf; typedef basic_stringbuf<char> stringbuf; typedef basic_stringbuf<wchar_t> wstringbuf; typedef basic_syncbuf<char> syncbuf; // C++20 typedef basic_syncbuf<wchar_t> wsyncbuf; // C++20 typedef basic_spanbuf<char> spanbuf; // C++23 typedef basic_spanbuf<wchar_t> wspanbuf; // C++23 typedef basic_istream<char> istream; typedef basic_istream<wchar_t> wistream; typedef basic_ostream<char> ostream; typedef basic_ostream<wchar_t> wostream; typedef basic_iostream<char> iostream; typedef basic_iostream<wchar_t> wiostream; typedef basic_ifstream<char> ifstream; typedef basic_ifstream<wchar_t> wifstream; typedef basic_ofstream<char> ofstream; typedef basic_ofstream<wchar_t> wofstream; typedef basic_fstream<char> fstream; typedef basic_fstream<wchar_t> wfstream; typedef basic_istringstream<char> istringstream; typedef basic_istringstream<wchar_t> wistringstream; typedef basic_ostringstream<char> ostringstream; typedef basic_ostringstream<wchar_t> wostringstream; typedef basic_stringstream<char> stringstream; typedef basic_stringstream<wchar_t> wstringstream; typedef basic_osyncstream<char> osyncstream; // C++20 typedef basic_osyncstream<wchar_t> wosyncstream; // C++20 typedef basic_ispanstream<char> ispanstream; // C++23 typedef basic_ispanstream<wchar_t> wispanstream; // C++23 typedef basic_ospanstream<char> ospanstream; // C++23 typedef basic_ospanstream<wchar_t> wospanstream; // C++23 typedef basic_spanstream<char> spanstream; // C++23 typedef basic_spanstream<wchar_t> wspanstream; // C++23
[править] Предопределённые стандартные потоковые объекты
| Определены в заголовочном файле
<iostream> | |
| читает из стандартного входного потока C stdin (глобальный объект) | |
| пишет в стандартный выходной поток C stdout (глобальный объект) | |
| пишет в стандартный поток ошибок C stderr, небуферизирована (глобальный объект) | |
| пишет в стандартный поток ошибок C stderr (глобальный объект) | |
[править] Манипуляторы ввода/вывода
Библиотека потокового ввода-вывода использует манипуляторы ввода/вывода (например, std::boolalpha, std::hex и т.д.) для управления поведением потоков.
[править] Типы
Определены следующие вспомогательные типы:
| Определены в заголовочном файле
<ios> | |
| представляет относительную позицию файла/потока (смещение от fpos), достаточную для представления любого размера файла (определение типа) | |
| представляет количество символов, переданных в операции ввода/вывода, или размер буфера ввода/вывода (определение типа) | |
| представляет абсолютную позицию в потоке или файле (шаблон класса) | |
Предоставляются следующие typedef имена для std::fpos<std::mbstate_t>:
| Определены в заголовочном файле
<iosfwd> | |
| Тип | Определение |
streampos
|
std::fpos<std::char_traits<char>::state_type> |
wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
u8streampos (C++20)
|
std::fpos<std::char_traits<char8_t>::state_type> |
u16streampos (C++11)
|
std::fpos<std::char_traits<char16_t>::state_type> |
u32streampos (C++11)
|
std::fpos<std::char_traits<char32_t>::state_type> |
[править] Интерфейс категорий ошибок
| Определены в заголовочном файле
<ios> | |
| (C++11) |
коды ошибок потока ввода/вывода (перечисление) |
| (C++11) |
определяет категорию ошибок iostream (функция) |
[править] Ввод/вывод в стиле C
C++ также включает в себя функции ввода/вывода, определённые в C, такие как std::fopen, std::getc и т.д.