Именованные требования C++: FormattedInputFunction
Требования
Форматированная функция ввода — это функция ввода из потока, которая выполняет следующие действия:
- Создаёт объект типа
basic_istream::sentryс автоматическим временем хранения и аргументомnoskipws, равнымfalse, который выполняет следующие действия: - если во входном потоке установлены
eofbitилиbadbit, устанавливает такжеfailbit, а если в маске исключений этого входного потока включены исключения дляfailbit((exceptions() & failbit) != 0), выбрасываетios_base::failure. - сбрасывает связанный выходной поток tie(), если применимо.
- если во входном потоке установлен флаг
ios_base::skipws, извлекает и отбрасывает символы из входного потока, пока не выполнится одно из следующих условий: - следующий доступный символ во входном потоке не является пробельным символом, что проверяется с помощью фасета
std::ctypeлокали, установленной в этом входном потоке. Непробельный символ не извлекается. - достигнут конец потока; в этом случае устанавливаются
failbitиeofbit, а если для одного из этих битов в потоке включены исключения, выбрасываетсяios_base::failure. - Проверяет состояние sentry, вызывая
sentry::operator bool(), что эквивалентноbasic_ios::good. - Если sentry вернул
falseили его конструктор выбросил исключение, ввод не выполняется. - Если sentry вернул
true, выполняет ввод так, как если бы были вызваныrdbuf()->sbumpc()илиrdbuf()->sgetc(). - если достигнут конец потока (вызов
rdbuf()->sbumpc()илиrdbuf()->sgetc()возвращаетTraits::eof()), устанавливаетeofbit. Если в маске исключений этого потока включены исключения дляeofbit((exceptions() & eofbit) != 0), выбрасываетios_base::failure. - если во время ввода выбрасывается исключение, устанавливает в входном потоке
badbit. Если в маске исключений этого потока включены исключения дляbadbit((exceptions() & badbit) != 0), исключение также выбрасывается повторно. - Если исключение не было выброшено, возвращает
*this. - В любом случае — при завершении из-за исключения или при возврате — перед выходом из этой функции вызывается деструктор sentry.
Стандартная библиотека
Следующие функции стандартной библиотеки являются форматированными функциями ввода.
basic_istream::operator>>(int, long, double, void*, bool)operator>>(std::basic_istream, char&)operator>>(std::basic_istream, char*)operator>>(std::basic_istream, std::bitset)operator>>(std::basic_istream, std::string)-
operator>>, при вызове для возвращаемого значенияstd::get_money
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 160 | C++98 | процесс определения того, следует ли повторно выбросить перехваченное исключение, ссылался на несуществующую функцию exception() | исправлено на exceptions() |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/FormattedInputFunction