Spec-Zone.ru › C++

Именованные требования C++: UnformattedInputFunction

Требования

UnformattedInputFunction — это функция ввода из потока, которая выполняет следующее:

1) Создаёт объект типа basic_istream::sentry с автоматическим временем хранения и аргументом noskipws, установленным в true, который выполняет следующее:
  • Если во входном потоке установлены eofbit или badbit, устанавливает также failbit и, если для failbit во входном потоке включены исключения в маске исключений этого потока ((exceptions() & failbit) != 0), выбрасывает ios_base::failure.
  • Сбрасывает связанный поток вывода (tie()), если применимо.
2) Проверяет состояние sentry вызовом 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::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/cpp/named_req/UnformattedInputFunction

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API