Несоответствие между C ++ std :: string :: compare () и оператором на строке - PullRequest
3 голосов
/ 19 апреля 2020

Учитывая приведенный ниже фрагмент кода C ++

cout<<("100">"035")<<"\n";
cout<<("100"<"035")<<"\n";
string str = "100";
cout<<str.compare("035");

Вывод этого кода

0
1
1

Что означает «100» <«035» для оператора, но «100» > «035» функцией сравнения. Есть ли какие-либо известные различия в реализации этих двух?

PS «100»> «035» определенно имеет больше смысла.

1 Ответ

6 голосов
/ 19 апреля 2020

C Строковые литералы (например, "100") сравнивают себя как указатель.

std::string Сравнение сравнивает лексикографический контент.

Если вы хотите получить согласованные результаты:

using namespace std::string_literals;
std::cout << ("100"s > "035"s)<<"\n";
std::cout << ("100"s < "035"s)<<"\n";
std::string str = "100"s;
std::cout << str.compare("035");

"100"s "эквивалентно" std::string("100").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...