Namespaces
Variants

std::basic_ios<CharT,Traits>:: operator bool

From cppreference.net
operator /* unspecified-boolean-type */ ( ) const ;
(1) (jusqu'au C++11)
explicit operator bool ( ) const ;
(2) (depuis C++11)

Vérifie si le flux n'a pas d'erreurs.

1) Retourne une valeur qui s'évalue à false dans un contexte booléen si fail ( ) retourne true , sinon retourne une valeur qui s'évalue à true dans un contexte booléen.
2) Retourne true si le flux n'a pas d'erreurs et est prêt pour les opérations d'E/S. Plus précisément, retourne ! fail ( ) .

Cet opérateur permet d'utiliser les flux et les fonctions qui renvoient des références à des flux comme conditions de boucle, ce qui donne les boucles d'entrée idiomatiques en C++ telles que while ( stream >> value ) { ... } ou while ( std:: getline ( stream, string ) ) { ... } . De telles boucles n'exécutent le corps de la boucle que si l'opération d'entrée a réussi.

Table des matières

Paramètres

(aucun)

Valeur de retour

1) Une valeur qui s'évalue à true dans un contexte booléen si le flux n'a pas d'erreurs, une valeur qui s'évalue à false dans un contexte booléen sinon.
2) true si le flux n'a pas d'erreurs, false sinon.

Notes

Cette conversion peut être utilisée dans des contextes où un bool est attendu (par exemple, une condition if ). Cependant, les conversions implicites (par exemple, vers int ) qui peuvent se produire avec bool ne sont pas autorisées.

En C++98, operator bool ne pouvait pas être fourni directement en raison du problème du booléen sécurisé . La solution initiale en C++98 consistait à fournir operator void * , qui renvoie un pointeur nul si fail ( ) retourne true ou un pointeur non nul sinon. Cela a été remplacé par la résolution du problème LWG 468 , qui permet d'appliquer l' idiome du booléen sécurisé .

Depuis C++11, les fonctions de conversion peuvent être explicit . La résolution du problème LWG 1094 a introduit l'opérateur explicite operator bool et la conversion booléenne est désormais sûre.

Exemple

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s("1 2 3 error");
    int n;
    std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n';
    while (s >> n)
        std::cout << n << '\n';
    std::cout << "s is " << static_cast<bool>(s) << '\n';
}

Sortie :

s is true
1
2
3
s is false

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 tel que publié Comportement correct
LWG 468 C++98 operator void * était fourni une fonction de conversion vers un type booléen non spécifié est fournie à la place

Voir aussi

Le tableau suivant présente les valeurs des basic_ios accesseurs ( good() , fail() , etc.) pour toutes les combinaisons possibles des ios_base::iostate indicateurs :

**Note:** Aucune traduction n'a été effectuée car : - Tous les termes textuels se trouvent dans des balises ` `, ` ` ou sont des termes spécifiques au C++ - Les attributs HTML et la structure ont été préservés conformément aux instructions - Les termes comme "eofbit", "failbit", "good()", "operator bool" sont des termes techniques C++ qui ne doivent pas être traduits
ios_base::iostate indicateurs basic_ios accesseurs
eofbit failbit badbit good() fail() bad() eof() operator bool operator!
faux faux faux vrai faux faux faux vrai faux
faux faux vrai faux vrai vrai faux faux vrai
faux vrai faux faux vrai faux faux faux vrai
faux vrai vrai faux vrai vrai faux faux vrai
vrai faux faux faux faux faux vrai vrai faux
vrai faux vrai faux vrai vrai vrai faux vrai
vrai vrai faux faux vrai faux vrai faux vrai
vrai vrai vrai faux vrai vrai vrai faux vrai