std::basic_istream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
Un objet de la classe
basic_istream::sentry
est construit dans la portée locale au début de chaque fonction membre de
std::basic_istream
qui effectue une entrée (formatée et non formatée). Son constructeur prépare le flux d'entrée : vérifie si le flux est déjà dans un état d'erreur, vide les flux de sortie liés par tie(), ignore les espaces blancs de début sauf si le drapeau
noskipws
est défini, et effectue d'autres tâches définies par l'implémentation si nécessaire. Tout nettoyage, si nécessaire, est effectué dans le destructeur, garantissant ainsi son exécution même si des exceptions sont levées pendant l'entrée.
Table des matières |
Types membres
traits_type
|
Traits
|
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 l'entrée formatée ou après une exception, si nécessaire
(fonction membre publique) |
|
operator=
[deleted]
|
non assignable par copie
(fonction membre publique) |
|
operator bool
|
vérifie si la préparation de l'objet flux a réussi
(fonction membre publique) |
std::basic_istream::sentry:: sentry
|
explicit
sentry
(
std::
basic_istream
<
CharT, Traits
>
&
is,
bool
noskipws
=
false
)
;
|
||
Prépare le flux pour l'entrée formatée.
Si is. good ( ) est false , appelle is. setstate ( std:: ios_base :: failbit ) et retourne. Sinon, si is. tie ( ) n'est pas un pointeur nul, appelle is. tie ( ) - > flush ( ) pour synchroniser la séquence de sortie avec les flux externes. Cet appel peut être supprimé si la zone de mise en mémoire tampon de sortie de is. tie ( ) est vide. L'implémentation peut différer l'appel à flush ( ) jusqu'à un appel de is. rdbuf ( ) - > underflow ( ) . Si aucun tel appel ne se produit avant que l'objet sentry ne soit détruit, il peut être entièrement éliminé.
Si noskipws est zéro et is. flags ( ) & std:: ios_base :: skipws est non nul, la fonction extrait et ignore tous les caractères d'espacement jusqu'à ce que le prochain caractère disponible ne soit pas un caractère d'espacement (tel que déterminé par les paramètres régionaux actuellement imbriqués dans is ). Si is. rdbuf ( ) - > sbumpc ( ) ou is. rdbuf ( ) - > sgetc ( ) retourne traits :: eof ( ) , la fonction appelle setstate ( std:: ios_base :: failbit | std:: ios_base :: eofbit ) (ce qui peut lancer std::ios_base::failure ).
Une préparation supplémentaire définie par l'implémentation peut avoir lieu, ce qui peut appeler setstate ( std:: ios_base :: failbit ) (ce qui peut lancer std::ios_base::failure ).
Si après la fin de la préparation, is. good ( ) == true , alors tout appel ultérieur à operator bool retournera true .
Paramètres
| is | - | flux d'entrée à préparer |
| noskipws | - | true si les espaces ne doivent pas être ignorés |
Exceptions
std::ios_base::failure si la condition de fin de fichier se produit lors de l'ignorance des espaces.
std::basic_istream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
Ne fait rien.
std::basic_istream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
Vérifie si la préparation du flux d'entrée a réussi.
Paramètres
(aucun)
Valeur de retour
true si l'initialisation du flux d'entrée a réussi, false sinon.
Exemple
#include <iostream> #include <sstream> struct Foo { char n[5]; }; std::istream& operator>>(std::istream& is, Foo& f) { std::istream::sentry s(is); if (s) is.read(f.n, 5); return is; } int main() { std::string input = " abcde"; std::istringstream stream(input); Foo f; stream >> f; std::cout.write(f.n, 5); std::cout << '\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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 195 | C++98 |
il n'était pas clair si le constructeur positionnait
eofbit
|
clarifié |
| LWG 419 | C++98 |
le constructeur ne positionnait pas
failbit
si
eofbit
était positionné
|
positionne
failbit
dans ce cas
|
Voir aussi
|
extrait des données formatées
(fonction membre publique) |
|
|
extrait des caractères et tableaux de caractères
(fonction template) |