C++ named requirements: UnformattedInputFunction
From cppreference.net
Требования
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) во входном потоке.
-
Если достигнут конец потока (вызов
rdbuf
(
)
-
>
sbumpc
(
)
или
rdbuf
(
)
-
>
sgetc
(
)
возвращает
Traits
::
eof
(
)
), устанавливает
3)
В любом случае, независимо от завершения через исключение или возврата, деструктор дозорного объекта вызывается перед выходом из этой функции.
Стандартная библиотека
Следующие функции стандартной библиотеки являются UnformattedInputFunction s .
- 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 | 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 не удается сконструировать, не было определено |
определено |