Bug STL ?

vincent - 25 oct. 2013 à 15:33
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 25 oct. 2013 à 19:30
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 25/10/2013 à 21:44
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.
0
Rejoignez-nous