Namespaces
Variants

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

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