string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
наборы
b[] = {true, true, false};
почему b[2]
ложно?
Если A==B
и не A==C
должно ли это подразумевать B==C
?
c++
string
stdstring
string-literals
equality-operator
NoComprende
источник
источник
Ответы:
В этом выражении
сравниваются два указателя (адреса). Первый - это указатель, возвращаемый,
s.c_str()
а второй - указатель на первый символ (завершающий нулевой символ) строкового литерала""
.Очевидно, что адреса разные (имейте в виду, что строковый литерал имеет статическую длительность хранения).
Чтобы получить ожидаемый результат, вы должны написать вместо
Что касается этих двух выражений
а также
затем сравниваются строки, потому что стандартный класс std :: string имеет перегруженный оператор == для правого операнда.
источник