Spec-Zone.ru › C++

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

Требования

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

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

Spec-Zone.ru

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