std::basic_ostream<CharT,Traits>:: sentry
|
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) |