9
votes

Pourquoi ne pas iOSTream Objects Overload Opérateur Bool?

dans Cette réponse Je parle d'utiliser une conversion d'objet std :: ifstream sur bool 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 surchargent réellement opérateur Void * . Il renvoie un pointeur NULL lorsque le flux est mauvais (qui peut être implicitement converti en false ) et un pointeur non nulle sinon (implicitement converti en vrai ). Pourquoi ne faites-ils pas simplement surcharger opérateur bool ?


0 commentaires

3 Réponses :


13
votes

Il ressemble à la section standard C ++ 0x 27.4.4.3 a la réponse (accentuation de la mine).

operator unspecified-bool-type() const;


1 commentaires

Cette réponse est obsolète. Il n'a pas été normalisé car des fonctions de conversion explicites ont été ajoutées.



7
votes

Ceci est une instance du problème "Safe Bool".

Voici un bon article: http://www.artima.com/cpppsource/safebool .html .

C ++ 0x aide la situation avec les fonctions de conversion explicites, ainsi que le changement que Kristo mentionne. Voir aussi est le Safe-Bool Idiom obsolète en C ++ 11? .


0 commentaires

-1
votes

Le plus récent C ++ 11 exige que:

explicit operator bool() const;


1 commentaires

explicite est la raison en laquelle il a été ajouté. Une fonction de conversion explicite telle que celle-ci s'appliquera uniquement s'il s'agit de la conversion seulement , dans ce cas, il convertira iostream sur bool mais pas à int via un BOOL conversion. Lisez les autres réponses sur cette page pour en savoir plus sur le coffre-fort Bool Idiom.