Bug STL ?

Signaler
-
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
-
Bonjour,

Je me permets de solliciter votre attention pour un bug des plus incomprehensible :

    std::cout<<(OPENING_BRACKET_IN + varname + CLOSING_BRACKET)<<std::endl;
std::cout<<tmp<<std::endl;
std::cout<<(tmp.compare(OPENING_BRACKET_IN + varname + CLOSING_BRACKET))<<std::endl;
std::cout<<(tmp == (OPENING_BRACKET_IN + varname + CLOSING_BRACKET))<<std::endl;


A priori les deux chaines de caractères sont identiques. L'opérateur operator== (ligne 3) indique qu'elle sont différentes mais la foncton compare (ligne 4) indique qu'elle sont identiques !

Une idée sur ce qui peut bien se passer ? Remarque : compilé sur Windows, pas de soucis, compilé sur Linux : problème.

Merci !

1 réponse

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Bonjour.

Il n'y a pas de "bug". Tu n'as juste pas lu le manuel :p

"compare" ne retourne pas un booléen mais un entier.
- Si a > b, on retourne une valeur positive
- Si a == b, on retourne 0
- Si a < b, on retourne une valeur négative

Le "if (a == b)" est en fait un "if (!a.compare(b))"

compilé sur Windows, pas de soucis
Le comportement devrait être le même sous les deux OS. Vérifie quelle STL tu utilises sous Windows (il y une seule STL, mais beaucoup d'implémentations différentes !) Celles sous les (très) vieilles versions de Visual Studio étant buggés.