string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
setzt
b[] = {true, true, false};
Warum ist b[2]
falsch?
Wenn A==B
und A==C
, sollte das nicht bedeuten B==C
?
c++
string
stdstring
string-literals
equality-operator
NoComprende
quelle
quelle
Antworten:
In diesem Ausdruck
Es werden zwei Zeiger (Adressen) verglichen. Der erste ist der von zurückgegebene Zeiger
s.c_str()
und der zweite ist der Zeiger auf das erste Zeichen (Abschlusszeichen Null) des Zeichenfolgenliteral""
.Es ist offensichtlich, dass die Adressen unterschiedlich sind (denken Sie auch daran, dass das Zeichenfolgenliteral die statische Speicherdauer hat).
Um das erwartete Ergebnis zu erhalten, sollten Sie stattdessen schreiben
Wie für diese beiden Ausdrücke
und
Dann werden Zeichenfolgen verglichen, da die Standardklasse std :: string den Operator == für den richtigen Operanden überladen hat.
quelle