Namespaces
Variants

C++ named requirements: UnformattedInputFunction

From cppreference.net
C++ named requirements

Требования

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

1) Создает объект типа basic_istream::sentry с автоматической продолжительностью хранения и с аргументом noskipws установленным в true , который выполняет следующие действия:
  • Если eofbit или badbit установлены во входном потоке, также устанавливает failbit , и если исключения для failbit включены в маске исключений этого входного потока exception mask ( ( exceptions ( ) & failbit ) ! = 0 ), генерирует исключение ios_base::failure .
  • Сбрасывает буфер связанного выходного потока (tie()'d output stream), если применимо.
2) Проверяет статус сторожевого объекта, вызывая sentry::operator bool() , что эквивалентно basic_ios::good .
  • Если оператор возвращает false или конструктор сторожевого объекта выбрасывает исключение:
  • Устанавливает количество извлеченных символов (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) В любом случае, независимо от завершения через исключение или возврата, деструктор дозорного объекта вызывается перед выходом из этой функции.

Стандартная библиотека

Следующие функции стандартной библиотеки являются UnformattedInputFunction s .

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
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 не удается сконструировать, не было определено
определено