string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
conjuntos
b[] = {true, true, false};
porque é b[2]
falso?
Se A==B
e A==C
, isso não deveria implicar B==C
?
c++
string
stdstring
string-literals
equality-operator
Não compreende
fonte
fonte
Respostas:
Nessa expressão
são comparados dois ponteiros (endereços). O primeiro é o ponteiro retornado por
s.c_str()
e o segundo é o ponteiro para o primeiro caractere (terminando o caractere zero) da string literal""
.É evidente que os endereços são diferentes (lembre-se também de que a string literal tem a duração do armazenamento estático).
Para obter o resultado esperado, você deve escrever
Quanto a essas duas expressões
e
há seqüências comparadas porque a classe padrão std :: string sobrecarregou o operador == para o operando certo.
fonte