Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp
 
 
Библиотека ввода/вывода
Манипуляторы ввода/вывода
Ввод/вывод в стиле C
Буферы
(устарело в C++98)
Потоки
Абстракции
Файловый ввод/вывод
Ввод/вывод строк
Ввод/вывод массивов
(устарело в C++98)
(устарело в C++98)
(устарело в C++98)
Синхронизированный вывод
Типы
Интерфейс категорий ошибок
(C++11)
 

C++ включает в себя две библиотеки ввода/вывода: ООП стиля потоковую библиотеку ввода/вывода и стандартный набор функций ввода/вывода в стиле 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 iostreamstd-io-complete-inheritance.svg

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

Абстракции
Определены в заголовочном файле <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>
оболочка синхронизированного устройства вывода
(шаблон класса) [править]
оболочка синхронизированного потока вывода
(шаблон класса) [править]

[править] Определения типов

Предоставляются следующие определения типов для общих типов символов:

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)
коды ошибок потока ввода/вывода
(перечисление) [править]
определяет категорию ошибок iostream
(функция) [править]

[править] Ввод/вывод в стиле C

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