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.
| Suivant |