Namespaces
Variants

C++ named requirements: UnformattedInputFunction

From cppreference.net
C++ named requirements

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:
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 , escribe CharT() (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 en eofbit está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 badbit en el flujo de entrada. Si las excepciones en badbit están habilitadas en la máscara de excepciones de este flujo ( ( exceptions ( ) & badbit ) ! = 0 ), la excepción también se relanza.
  • Si no se lanzó ninguna excepción durante la entrada, establece el número de caracteres extraídos (gcount) en el flujo de entrada.
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 .

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