Лексикографическое сравнение
string s="55", s1="5";
cout<<(s>s1);//true
cout<<("55">"5");//false
Почему без создание переменной сравнение неправильно работает?
Ответы (1 шт):
Автор решения: Chorkov
→ Ссылка
Потому что выражение "55" имеет тип const char*, а не std::string.
Для сравнения указателей используются правила, отличные от лексикографического сравнения. (Сравниваются адреса памяти, куда они указывают. Т.е. где эти константные строки размещены.) Это поведение сохранено для обеспечения совместимости с C.
Если не хотите создавать сравнить string используйте:
cout<<("55"s>"5"s); // C++14
cout<<(string("55")>string("5") ); // до C++14