std::basic_ios<CharT,Traits>:: operator bool
|
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.
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
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 :
| 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 |