C++ именованные требования: UnformattedInputFunction
Требования
UnformattedInputFunction — это функция потокового ввода, которая выполняет следующее:
1) Создаёт объект типаbasic_istream::sentry со сроком действия «автоматическое хранение» и с аргументом noskipws, установленным в значение true, который выполняет следующее: - Если
eofbitилиbadbitустановлены в потоке ввода, то устанавливает такжеfailbit, и если исключения наfailbitвключены в маске исключений маске исключений этого потока ввода ((exceptions() & failbit) != 0), выбрасывает исключениеios_base::failure. - Применяет flush к связанному потоку вывода, если применимо.
sentry::operator bool(), что эквивалентно basic_ios::good. - Если оператор возвращает
falseили конструктор sentry выбрасывает исключение: - Устанавливает количество извлеченных символов (gcount) в потоке ввода равным нулю.
- Если функция была вызвана для записи в массив
CharT, записываетCharT()(символ null) в первую ячейку массива. - Если оператор возвращает
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::get -
basic_istream::getline -
basic_istream::ignore -
basic_istream::peek -
basic_istream::read -
basic_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/w/cpp/named_req/UnformattedInputFunction