std::basic_ostream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
Un objeto de la clase
basic_ostream::sentry
se construye en ámbito local al comienzo de cada función miembro de
std::basic_ostream
que realiza salida (tanto formateada como no formateada). Su constructor prepara el flujo de salida: verifica si el flujo ya está en estado de fallo, vacía los flujos de salida enlazados mediante tie(), y realiza otras tareas definidas por la implementación si es necesario. La limpieza definida por la implementación, así como el vaciado del flujo de salida si es necesario, se realiza en el destructor, garantizando que ocurra si se lanzan excepciones durante la salida.
Contenidos |
Funciones miembro
|
(constructor)
|
construye el objeto sentry. Aquí se realizan todas las tareas de preparación
(función miembro pública) |
|
(destructor)
|
finaliza el objeto stream después de la salida formateada o después de una excepción, si es necesario
(función miembro pública) |
|
operator=
|
el operador de asignación está eliminado
(función miembro pública) |
|
operator bool
|
verifica si la preparación del objeto stream fue exitosa
(función miembro pública) |
std::basic_ostream::sentry:: sentry
|
explicit
sentry
(
std::
basic_ostream
<
CharT, Traits
>
&
os
)
;
|
||
Prepara el flujo para salida formateada.
Si os. good ( ) es false , retorna. De lo contrario, si os. tie ( ) no es un puntero nulo, llama a os. tie ( ) - > flush ( ) para sincronizar la secuencia de salida con flujos externos. Durante la preparación, el constructor puede llamar a setstate ( failbit ) (lo cual puede lanzar std::ios_base::failure ).
Si después de completarse la preparación, os. good ( ) == true , entonces cualquier llamada posterior a operator bool retornará true .
Parámetros
| os | - | flujo de salida a preparar |
Excepciones
std::ios_base::failure si ocurre una condición de fin de archivo.
std::basic_ostream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
Si ( os. flags ( ) & std:: ios_base :: unitbuf ) && ! std:: uncaught_exception ( ) && os. good ( ) ) es true , llama a os. rdbuf ( ) - > pubsync ( ) . Si esa función retorna - 1 , establece badbit en os. rdstate ( ) sin propagar una excepción.
std::basic_ostream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
Verifica si la preparación del flujo de salida fue exitosa.
Parámetros
(ninguno)
Valor de retorno
true si la preparación del flujo de salida fue exitosa, false en caso contrario.
Ejemplo
#include <iostream> #include <sstream> struct Foo { char n[6]; }; std::ostream& operator<<(std::ostream& os, Foo& f) { std::ostream::sentry s(os); if (s) os.write(f.n, 5); return os; } int main() { Foo f = {"abcde"}; std::cout << f << '\n'; }
Salida:
abcde
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 397 | C++98 | el destructor podría llamar os. flush ( ) , lo cual puede lanzar excepciones | la excepción no se propaga |
| LWG 442 | C++98 | operator bool no estaba declarado const (es const en la sinopsis ) | se añadió const |
| LWG 835 | C++98 |
si
os
establece
unitbuf
, el destructor llamaría
os.
flush
(
)
, lo cual
es una UnformattedOutputFunction y crea otro objeto centinela (cuyo destructor luego crea otro objeto centinela y así sucesivamente) |
llama
os. rdbuf ( ) - > pubsync ( ) en este caso en su lugar |
Véase también
|
inserta datos formateados
(función miembro pública) |