C++ named requirements: UnformattedInputFunction
From cppreference.net
Requisitos
Una UnformattedInputFunction es una función de entrada de flujo que realiza lo siguiente:
1)
Construye un objeto de tipo
basic_istream::sentry
con duración de almacenamiento automático y con el argumento
noskipws
establecido en
true
, que realiza lo siguiente:
-
Si
eofbit
o
badbit
están activados en el flujo de entrada, establece también el
failbit
, y si las excepciones en
failbitestán habilitadas en la máscara de excepciones de este flujo de entrada ( ( exceptions ( ) & failbit ) ! = 0 ), lanza ios_base::failure . - Vacía el flujo de salida enlazado (tie()'d), si es aplicable.
2)
Verifica el estado del centinela llamando a
sentry::operator bool()
, que es equivalente a
basic_ios::good
.
- Si el operador retorna false o el constructor del centinela lanza una excepción:
-
- Establece el número de caracteres extraídos (gcount) en el flujo de entrada a cero.
-
Si la función fue llamada para escribir en un arreglo de
CharT, escribeCharT()(el carácter nulo) en la primera posición del arreglo.
- Si el operador retorna true , realiza la entrada como si llamara a rdbuf ( ) - > sbumpc ( ) o rdbuf ( ) - > sgetc ( ) .
-
-
Si se alcanza el final del flujo (la llamada a
rdbuf
(
)
-
>
sbumpc
(
)
o
rdbuf
(
)
-
>
sgetc
(
)
retorna
Traits
::
eof
(
)
), establece
eofbit. Si las excepciones eneofbitestán habilitadas en la máscara de excepciones de este flujo ( ( exceptions ( ) & eofbit ) ! = 0 ), lanza ios_base::failure . -
Si se lanza una excepción durante la entrada, establece
badbiten el flujo de entrada. Si las excepciones enbadbitestán habilitadas en la máscara de excepciones de este flujo ( ( exceptions ( ) & badbit ) ! = 0 ), la excepción también se relanza.
-
- Las excepciones lanzadas desde basic_ios::clear no se capturan ni se relanzan.
- Si no se lanzó ninguna excepción durante la entrada, establece el número de caracteres extraídos (gcount) en el flujo de entrada.
-
Si se alcanza el final del flujo (la llamada a
rdbuf
(
)
-
>
sbumpc
(
)
o
rdbuf
(
)
-
>
sgetc
(
)
retorna
Traits
::
eof
(
)
), establece
3)
En cualquier caso, ya sea terminando por excepción o retornando, el destructor del centinela es llamado antes de salir de esta función.
Biblioteca estándar
Las siguientes funciones de la biblioteca estándar son UnformattedInputFunction s .
- std::getline , excepto que no modifica 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
, excepto que primero limpia
eofbit -
basic_istream::unget
, excepto que primero limpia
eofbit - basic_istream::sync , excepto que no modifica gcount
- basic_istream::tellg , excepto que no modifica gcount
-
basic_istream::seekg
, excepto que primero limpia
eofbity no modifica gcount - std::ws , excepto que no modifica gcount
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 61 | C++98 |
no estaba claro si lanzar una excepción debido a
establecer
eofbit
y/o
failbit
resultaría en establecer
badbit
|
las excepciones lanzadas desde
basic_ios::clear
no se capturan ni se relanzan |
| LWG 160 | C++98 |
el proceso para determinar si la excepción capturada
se relanza mencionaba una función inexistente
exception()
|
corregido a exceptions() |
| LWG 243 | C++98 |
el comportamiento cuando
sentry::operator bool()
retorna
false
o el objeto sentry falla al construirse no estaba especificado |
especificado |