Лексикографическое сравнение

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

→ Ссылка