Namespaces
Variants

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

From cppreference.net
class sentry ;

Un objet de la classe basic_ostream::sentry est construit dans la portée locale au début de chaque fonction membre de std::basic_ostream qui effectue une sortie (à la fois formatée et non formatée). Son constructeur prépare le flux de sortie : vérifie si le flux est déjà dans un état d'erreur, vide les flux de sortie liés par tie(), et effectue d'autres tâches définies par l'implémentation si nécessaire. Le nettoyage défini par l'implémentation, ainsi que le vidage du flux de sortie si nécessaire, sont effectués dans le destructeur, garantissant ainsi leur exécution même si des exceptions sont levées pendant la sortie.

Table des matières

Fonctions membres

(constructor)
construit l'objet sentry. Toutes les tâches de préparation sont effectuées ici
(fonction membre publique)
(destructor)
finalise l'objet flux après la sortie formatée ou après une exception, si nécessaire
(fonction membre publique)
operator=
l'opérateur d'affectation est supprimé
(fonction membre publique)
operator bool
vérifie si la préparation de l'objet flux a réussi
(fonction membre publique)

std::basic_ostream::sentry:: sentry

explicit sentry ( std:: basic_ostream < CharT, Traits > & os ) ;

Prépare le flux pour la sortie formatée.

Si os. good ( ) est false , retourne. Sinon, si os. tie ( ) n'est pas un pointeur nul, appelle os. tie ( ) - > flush ( ) pour synchroniser la séquence de sortie avec les flux externes. Pendant la préparation, le constructeur peut appeler setstate ( failbit ) (ce qui peut lever std::ios_base::failure ).

Si après la fin de la préparation, os. good ( ) == true , alors tout appel ultérieur à operator bool retournera true .

Paramètres

os - flux de sortie à préparer

Exceptions

std::ios_base::failure si une condition de fin de fichier se produit.


std::basic_ostream::sentry:: ~sentry

~sentry ( ) ;

Si ( os. flags ( ) & std:: ios_base :: unitbuf ) && ! std:: uncaught_exception ( ) && os. good ( ) ) est true , appelle os. rdbuf ( ) - > pubsync ( ) . Si cette fonction retourne - 1 , positionne le badbit dans os. rdstate ( ) sans propager d'exception.


std::basic_ostream::sentry:: operator bool

explicit operator bool ( ) const ;

Vérifie si la préparation du flux de sortie a réussi.

Paramètres

(aucun)

Valeur de retour

true si la préparation du flux de sortie a réussi, false sinon.

Exemple

#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';
}

Sortie :

abcde

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 397 C++98 le destructeur pouvait appeler os. flush ( ) , ce qui pouvait lever des exceptions l'exception n'est pas propagée
LWG 442 C++98 operator bool n'était pas déclaré const (il est const dans la synopsis ) ajout de const
LWG 835 C++98 si os positionne unitbuf , le destructeur appellerait os. flush ( ) , qui
est une UnformattedOutputFunction et crée un autre objet sentry
(dont le destructeur crée alors un autre objet sentry et ainsi de suite)
appelle
os. rdbuf ( ) - > pubsync ( )
dans ce cas à la place

Voir aussi

insère des données formatées
(fonction membre publique)