Requisitos denominados de C++: UnformattedOutputFunction
De cppreference.com
[editar] Requisitos
Una UnformattedOutputFunction es una función de salida de flujo que realiza lo siguiente:
1) Construye un objeto de tipo basic_ostream::sentry con duración de almacenamiento automática, que realiza lo siguiente:
- Si eofbit o badbit están configurados en el flujo de salida, también configura failbit y, si las excepciones en
failbit
están habilitadas en la máscara de excepciones de este flujo de salida ((exceptions() & failbit) != 0), lanza ios_base::failure. - Vacía el flujo de salida ligado por tie(), si corresponde.
2) Verifica el estado del centinela llamando a
sentry::operator bool()
, que es equivalente a basic_ios::good.- Si el operador devuelve false o el constructor del centinela lanza una excepción, no se produce ninguna salida.
- Si el operador devuelve true, intenta realizar la salida deseada insertando los caracteres en el flujo de salida como si llamara a rdbuf()->sputc(). También se pueden usar otros miembros públicos de std::basic_ostream, pero nunca se llamarán a los miembros virtuales de rdbuf() excepto overflow(), xsputn() y sync().
- Si se lanza una excepción durante la salida, establece
badbit
en el flujo de salida. Si las excepciones enbadbit
están habilitadas en la máscara de excepciones de este flujo ((exceptions() & badbit) != 0), la excepción también se vuelve a lanzar. - Si no se lanzó ninguna excepción, devuelve el valor especificado por la función.
- Si se lanza una excepción durante la salida, establece
3) En cualquier caso, ya sea que se termine por excepción o por retorno, 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 UnformattedOutputFunction.
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
| (desde C++11) |
[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 63 | C++98 | Faltaba la política de manejo de excepciones. | Se agregó. |
LWG 160 | C++98 | El proceso de determinar si la excepción capturada se vuelve a generar mencionó una función inexistente exception() . | Se corrigió a exceptions(). |
LWG 165 | C++98 | El único miembro virtual que se podía llamar en rdbuf() era overflow() . | También se permitíaxsputn() y sync() . |