Именованные требования C++: UnformattedInputFunction
Требования
UnformattedInputFunction — это функция ввода из потока, которая выполняет следующее:
1) Создаёт объект типаbasic_istream::sentry с автоматическим временем хранения и аргументом noskipws, установленным в true, который выполняет следующее: - Если во входном потоке установлены
eofbitилиbadbit, устанавливает такжеfailbitи, если дляfailbitво входном потоке включены исключения в маске исключений этого потока ((exceptions() & failbit) != 0), выбрасываетios_base::failure. - Сбрасывает связанный поток вывода (tie()), если применимо.
sentry::operator bool(), что эквивалентно basic_ios::good. - Если оператор возвращает
falseили конструктор sentry выбрасывает исключение: - Устанавливает количество извлечённых символов (gcount) во входном потоке равным нулю.
- Если функция вызвана для записи в массив
CharT, записываетCharT()(нулевой символ) в первую позицию массива. - Если оператор возвращает
true, выполняет ввод так, как если бы был вызванrdbuf()->sbumpc()илиrdbuf()->sgetc(). - Если достигнут конец потока (вызов
rdbuf()->sbumpc()илиrdbuf()->sgetc()возвращаетTraits::eof()), устанавливаетeofbit. Если дляeofbitв маске исключений этого потока включены исключения ((exceptions() & eofbit) != 0), выбрасываетios_base::failure. - Если во время ввода выбрасывается исключение, устанавливает
badbitво входном потоке. Если дляbadbitв маске исключений этого потока включены исключения ((exceptions() & badbit) != 0), исключение также выбрасывается повторно. - Исключения, выбрасываемые из
basic_ios::clear, не перехватываются и не выбрасываются повторно. - Если во время ввода не было выброшено исключение, устанавливает количество извлечённых символов (gcount) во входном потоке.
3) В любом случае, независимо от того, завершилась ли функция исключением или возвратом, перед выходом из неё вызывается деструктор sentry.
Стандартная библиотека
Следующие функции стандартной библиотеки являются UnformattedInputFunctions.
-
std::getline, за исключением того, что она не изменяет gcount. basic_istream::operator>>(basic_streambuf*)basic_istream::getbasic_istream::getlinebasic_istream::ignorebasic_istream::peekbasic_istream::readbasic_istream::readsome-
basic_istream::putback, за исключением того, что сначала она сбрасываетeofbit -
basic_istream::unget, за исключением того, что сначала она сбрасываетeofbit -
basic_istream::sync, за исключением того, что она не изменяет gcount -
basic_istream::tellg, за исключением того, что она не изменяет gcount -
basic_istream::seekg, за исключением того, что сначала она сбрасываетeofbitи не изменяет gcount -
std::ws, за исключением того, что она не изменяет gcount
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 61 | C++98 | было неясно, приведёт ли выбрасывание исключения из-за установки eofbit и/или failbit к установке badbit | исключения, выбрасываемые из basic_ios::clear,не перехватываются и не выбрасываются повторно |
| LWG 160 | C++98 | при определении того, следует ли повторно выбросить перехваченное исключение, упоминалась несуществующая функция exception() | исправлено на exceptions() |
| LWG 243 | C++98 | поведение в случае, когда sentry::operator bool() возвращает falseили объект sentry не удаётся создать, не было определено | определено |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/UnformattedInputFunction