Il y a un problème avec la conversion booléenne. Il permet des syntaxes qui sont presque toujours une douleur. Heureusement, il existe une solution: l'expression Safe Bool.
Le problème avec une conversion à bool
est que la conversion implicite est dangereuse. Par conséquent, operator bool() const
est une abomination. Soit vous fournissez une méthode explicite ... soit vous utilisez l'idiome booléen sécurisé.
L'idée de l'idiome est de vous donner une instance d'un type avec un sous-ensemble assez minime d'opérations et presque aucun cas où la conversion implicite vous donnera des ennuis. Ceci est fait en utilisant un pointeur sur la fonction membre.
Des opérations telles que if (p)
et if (!p)
prennent tout leur sens, mais if (p < q)
échouera à la compilation.
Lisez le lien à fond pour la solution complète, et vous comprendrez pourquoi c'était une bonne idée de ne pas avoir operator bool() const
.
La question http://stackoverflow.com/q/2953530/427532 est quelque peu liée. –