dans Cette réponse Je parle d'utiliser une conversion d'objet std :: ifstream code> sur
bool code> pour tester si le flux est toujours dans un bon état. J'ai regardé dans le livre Josuttis pour plus d'informations (p. 600 si vous êtes intéressé), et il s'avère que les objets
iostream code> surchargent réellement
opérateur Void * code>. Il renvoie un pointeur NULL lorsque le flux est mauvais (qui peut être implicitement converti en
false code>) et un pointeur non nulle sinon (implicitement converti en
vrai code>). Pourquoi ne faites-ils pas simplement surcharger
opérateur bool code>? P>
3 Réponses :
Il ressemble à la section standard C ++ 0x 27.4.4.3 a la réponse (accentuation de la mine).
operator unspecified-bool-type() const;
Cette réponse est obsolète. Il n'a pas été normalisé car des fonctions de conversion explicites ont été ajoutées.
Ceci est une instance du problème "Safe Bool". P>
Voici un bon article: http://www.artima.com/cpppsource/safebool .html . P>
C ++ 0x aide la situation avec les fonctions de conversion code> explicites, ainsi que le changement que Kristo mentionne. Voir aussi est le Safe-Bool Idiom obsolète en C ++ 11? . p>
Le plus récent C ++ 11 exige que:
explicit operator bool() const;
explicite code> est la raison en laquelle il a été ajouté. Une fonction de conversion code> explicite code> telle que celle-ci s'appliquera uniquement s'il s'agit de la conversion seulement i>, dans ce cas, il convertira
iostream code> sur
bool code> mais pas à
int code> via un
BOOL code> conversion. Lisez les autres réponses sur cette page pour en savoir plus sur le coffre-fort Bool Idiom.