Requisitos denominados de C++:UnformattedInputFunction
De cppreference.com
[editar]Requisitos
Una FunciónDeEntradaSinFormato es una función de entrada de flujo que hace lo siguiente:
1) Construye un objeto de tipo basic_istream::sentry con duración de almacenamiento automática y con el argumento
noskipws
establecido a true, que realiza los siguiente: - Si están establecidos eofbit o badbit en el flujo de entrada, también establece failbit y, si las excepciones en
failbit
están habilitadas en la máscara de excepciones de este flujo de entrada ((exceptions()& failbit)!=0), lanza la excepción ios_base::failure. - Limpia el flujo de salida tie(), si corresponde.
2) Comprueba el estado del centinela (sentry) llamando a
sentry::operator bool()
, que es equivalente a basic_ios::good. - Si el operador devuelve false o el constructor de sentry lanza una excepción:
- Establece el número de caracteres extraídos (gcount) en el flujo de entrada en cero.
- Si se llamó a la función para escribir en un array de
CharT
, escribeCharT()
(el carácter nulo) en la primera ubicación del array.
- Si el operador devuelve 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() devuelve Traits::eof()), se establece
eofbit
. Si las excepciones eneofbit
están habilitadas en la máscara de exccepciones de este flujo ((exceptions()& eofbit)!=0), lanza la excepción ios_base::failure. - Si se genera una excepción durante la entrada, se establece
badbit
en el flujo de entrada. Si las excepcionesbadbit
están habilitadas en la máscara de excepciones de este flujo ((exceptions()& badbit)!=0), la excepción también se vuelve a generar.
- Las excepciones lanzadas desde basic_ios::clear no se capturan ni se relanzan.
- Si no se lanzó ninguna excepción durante la entrada, establece la cantidad 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() devuelve Traits::eof()), se establece
3) En cualquier caso, ya sea terminando por excepción o retornando, se llama al destructor del centinela antes de salir de esta función.
[editar]Biblioteca estándar
Las siguientes funciones de la biblioteca estándar son FunciónDeEntradaSinFormato.
- 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 borra
eofbit
- basic_istream::unget, excepto que primero borra
eofbit
- basic_istream::sync, excepto que no modifica gcount
- basic_istream::tellg, excepto que no modifica gcount
- basic_istream::seekg, excepto que primero borra
eofbit
y no modifica gcount - std::ws, excepto que no modifica gcount
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 61 | C++98 | No estaba claro si lanzar un excepción debido a la configuración deeofbit y/o failbit resultaba en la configuración de badbit . | Las excepciones lanzadas desde basic_ios::clear no se capturan ni se vuelven a lanzar. |
LWG 160 | C++98 | El proceso de determinar si la excepción capturada se vuelve a generar menciona una función inexistente, exception() . | Corregido a exceptions(). |
LWG 243 | C++98 | No se especificaba el comportamiento cuando sentry::operator bool() devuelve false o el objeto centinela no se puede construir. | Se especifica. |