string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
set
b[] = {true, true, false};
mengapa b[2]
salah?
Jika A==B
dan A==C
, bukankah itu berarti B==C
?
c++
string
stdstring
string-literals
equality-operator
NoComprende
sumber
sumber
Jawaban:
Dalam ungkapan ini
ada dibandingkan dua petunjuk (alamat). Yang pertama adalah pointer yang dikembalikan oleh
s.c_str()
dan yang kedua adalah pointer ke karakter pertama (mengakhiri karakter nol) dari string literal""
.Jelas bahwa alamatnya berbeda (ingat juga bahwa string literal memiliki durasi penyimpanan statis).
Untuk mendapatkan hasil yang diharapkan, Anda harus menulis
Adapun dua ungkapan ini
dan
kemudian ada string yang dibandingkan karena std :: string kelas standar telah membebani operator == untuk operan yang tepat.
sumber