p1
и p2
указывают на одно и то же содержимое строки, следующие коды сравнивают их адреса, которые отличаются.Перегруппировка операторов класса строк
const char *p1 = "abc";
const char p2[] = {'a', 'b', 'c', '\0'};
cout << (p1 == p2) << endl; // 0 (false)
Но когда я построить строковую переменную, основанную на p2
, затем сравнивая p1
и строку переменной урожайности 1
вместо 0
.
string s1(p2);
cout << (p1 == s1) << endl; // 1 (true)
Мой вопрос: класс строка имеет конструктор, который принимает const char*
в качестве только аргумент, который говорит, что компилятор преобразоватьconst char*
в строку, когда это возможно:
string (const char* s);
Почему не преобразует компилятор p2
во временную строковую переменную, а затем сравнивает его с p1
с использованием оператора, определенного в строковом классе:
bool operator== (const char* lhs, const string& rhs);