Une première énumération dans ios
contient une liste de masques unitaires (cest-à-dire dentiers dont un seul bit vaut 1) ; utilisés sur un champ particulier, ils indiquent létat du flot. Ce champ détat nest pas accessible directement mais peut être lu par la fonction membre int rdstate(void)
. Voici les bits indicateurs qui peuvent être positionnés :
ios::goodbit | Lorsque ce bit vaut 0, ainsi que tous les autres, tout va bien. La fonction membre int good(void) renvoie 1 si tous les bits détat sont à zéro (tout va bien), 0 sinon. |
ios::eofbit | Lorsque ce bit vaut 1, la fin du fichier est atteinte. La fonction membre int eof() renvoie 1 dans ce cas, 0 sinon. |
ios::failbit | Ce bit est à 1 lorsquune opération a échoué. Le flot peut être réutilisé. |
ios::badbit | Ce bit est à 1 lorsquune opération invalide a été tentée ; en principe le flot peut continuer à être utilisé mais ce nest pas certain. |
ios::hardfail | Ce bit est à 1 lorsquune erreur grave sest produite ; il ne faut plus utiliser le flot. |
La fonction membre int bad(void)
renvoie 1 si lun des deux bits ios::badbit
ou ios::hardfail
est à 1, 0 sinon. La fonction membre int fail(void)
renvoie 1 si lun des trois bits ios::badbit
ou ios::failbit
ou ios::hardfail
est à 1, et 0 sinon.
La fonction membre void clear(int i = 0)
permet de modifier létat du flot. Par exemple, lécriture fl.clear(ios::failbit)
positionne le bit ios::failbit
du flot fl
, indiquant une erreur grave.
Signalons les deux opérateurs suivants :
class ios { public: // ... operator void* (); int operator! ();};
Lopérateur !
(redéfini pour cette classe) renvoie 1 si lun des bits détat est à 1 (flot incorrect), 0 sinon. Au contraire lopérateur void*
, lui aussi redéfini, renvoie 0 si lun des bits détat est à 1, un pointeur non nul (et dépourvu de signification) sinon. Cela permet des écritures du type :
iostream fl;// ...if (fl) cout << "Tout va bien !\n";// ...if (!fl) cout << "Une erreur s'est produite.\n";
plus agréables que lappel à fl.good
.
Précédent | Sommaire | Suivant |