string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
zestawy
b[] = {true, true, false};
dlaczego b[2]
fałsz?
Jeśli A==B
i A==C
czy nie powinno to oznaczać B==C
?
c++
string
stdstring
string-literals
equality-operator
NoComprende
źródło
źródło
Odpowiedzi:
W tym wyrażeniu
porównywane są dwa wskaźniki (adresy). Pierwszy to wskaźnik zwracany przez,
s.c_str()
a drugi to wskaźnik do pierwszego znaku (kończącego znak zero) literału łańcucha""
.Oczywiste jest, że adresy są różne (należy również pamiętać, że literał łańcuchowy ma statyczny czas przechowywania).
Aby uzyskać oczekiwany wynik, powinieneś napisać zamiast tego
Co do tych dwóch wyrażeń
i
następnie porównywane są łańcuchy, ponieważ standardowa klasa std :: string przeciąża operator == dla właściwego operandu.
źródło