C++ named requirements: UnformattedOutputFunction
From cppreference.net
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ático, que realiza lo siguiente:
-
Si
eofbit
o
badbit
están activados en el flujo de salida, establece también el
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 enlazado (tie()), 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, no se produce ninguna salida.
- Si el operador retorna true , intenta realizar la salida deseada insertando los caracteres en el flujo de salida como si se llamara a rdbuf ( ) - > sputc ( ) . También pueden usarse otros miembros públicos de std::basic_ostream , pero los miembros virtuales de rdbuf ( ) excepto overflow() , xsputn() y sync() nunca serán llamados.
-
-
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 relanza. - Si no se lanzó ninguna excepción, retorna el valor especificado por la función.
-
Si se lanza una excepción durante la salida, 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 UnformattedOutputFunction s .
- 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 que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 63 | C++98 | faltaba la política de manejo de excepciones | añadida |
| LWG 160 | C++98 |
el proceso para determinar si la excepción capturada
es relanzada mencionaba una función inexistente
exception()
|
corregido a exceptions() |
| LWG 165 | C++98 |
el único miembro virtual permitido para ser
llamado en rdbuf ( ) era
overflow()
|
también permitido
xsputn()
y
sync()
|