Requisitos denominados de C++: UnformattedOutputFunction
De cppreference.com
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
failbitestá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
falseo 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 ardbuf()->sputc(). También se pueden usar otros miembros públicos de std::basic_ostream, pero nunca se llamarán a los miembros virtuales derdbuf()excepto overflow(), xsputn() y sync().
- Si se lanza una excepción durante la salida, establece
badbiten el flujo de salida. Si las excepciones enbadbitestá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.
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) |
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().
|