string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
conjuntos
b[] = {true, true, false};
¿Por qué es b[2]
falso?
Si A==B
y A==C
, ¿no debería implicar eso B==C
?
c++
string
stdstring
string-literals
equality-operator
No comprendo
fuente
fuente
Respuestas:
En esta expresion
Se comparan dos punteros (direcciones). El primero es el puntero devuelto por
s.c_str()
y el segundo es el puntero al primer carácter (terminando el carácter cero) del literal de cadena""
.Es evidente que las direcciones son diferentes (tenga en cuenta también que el literal de cadena tiene la duración del almacenamiento estático).
Para obtener el resultado esperado, debe escribir en su lugar
En cuanto a estas dos expresiones
y
entonces hay cadenas comparadas porque la clase estándar std :: string ha sobrecargado el operador == para el operando correcto.
fuente