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

Рейтинг: 1Ответов: 1Опубликовано: 27.03.2023
string s="55", s1="5";

cout<<(s>s1);//true

cout<<("55">"5");//false

Почему без создание переменной сравнение неправильно работает?

Ответы

▲ 5Принят

Потому что выражение "55" имеет тип const char*, а не std::string.

Для сравнения указателей используются правила, отличные от лексикографического сравнения. (Сравниваются адреса памяти, куда они указывают. Т.е. где эти константные строки размещены.) Это поведение сохранено для обеспечения совместимости с C.

Если не хотите создавать сравнить string используйте:

cout<<("55"s>"5"s); // C++14
cout<<(string("55")>string("5") ); // до C++14