Namespaces
Variants

std::basic_ostream<CharT,Traits>:: sentry

From cppreference.net
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)