string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
ensembles
b[] = {true, true, false};
pourquoi est b[2]
faux?
Si A==B
et A==C
, cela ne devrait-il pas impliquer B==C
?
c++
string
stdstring
string-literals
equality-operator
NoComprende
la source
la source
Réponses:
Dans cette expression
on compare deux pointeurs (adresses). Le premier est le pointeur renvoyé par
s.c_str()
et le second est le pointeur sur le premier caractère (caractère zéro de terminaison) du littéral de chaîne""
.Il est évident que les adresses sont différentes (gardez également à l'esprit que le littéral de chaîne a la durée de stockage statique).
Pour obtenir le résultat attendu, vous devez plutôt écrire
Quant à ces deux expressions
et
puis il y a des chaînes comparées car la classe standard std :: string a surchargé l'opérateur == pour l'opérande de droite.
la source