Peut deux booléens être comparé au C++?

Est le morceau de code suivant censé fonctionner?

bool b1 = true;
bool b2 = 1 < 2;
if (b1 == b2)
{
//do something
}

Je soupçonne que tous les "trues" sont égaux.

  • Êtes-vous ce qui implique que vous avez testé ce code et le "// faire quelque chose", la partie n'a pas été exécuté?
  • quelle doit être la différence entre le vrai et le vrai être?
  • Oui, bien sûr 🙂 Mon scénario est un peu plus compliqué, mais en principe, oui. (Peut-être que j'ai fait quelque chose de mal, mais reécriture == résolu mon problème).
  • Je me doutais bien que vrai, c'est juste toute différente de zéro (peut-être une certaine optimisation du compilateur?). Comme en C.
  • Si vous convertissez true à un nombre entier, il est 1. Si vous convertir un nombre entier en un booléen, une valeur autre que zéro est true.
  • La différence a été causé par le "plus compliqué", pas par la version simplifiée que vous avez posté.
  • true == static_cast<bool>(2) mais vrai != 2. C'était peut-être la différence.
  • Dans mon code, il n'y avait pas de débris. Un booléen est a partir de la variable booléenne, l'autre à partir de l'appelant inline fonction booléenne qui contenait de l'or au niveau du bit & comme ceci: bool test() { return (x & 2) != 0; }. Donc soit je fait une erreur vraiment stupide que je n'ai pas vu ou le compilateur fait un peu bizarre d'optimisation. L'ancien est beaucoup plus probable :-).

InformationsquelleAutor danatel | 2010-02-03