В C ++ 20 появился новый оператор сравнения <=>
. Однако я думаю, что в большинстве случаев хорошо работает простое вычитание:
int my_strcmp(const char *a, const char *b) {
while (*a == *b && *a != 0 && *b != 0) {
a++, b++;
}
// Version 1
return *a - *b;
// Version 2
return *a <=> *b;
// Version 3
return ((*a > *b) - (*a < *b));
}
У них такой же эффект. Я не могу понять разницу.
<=>
быть параметром шаблона, не являющимся типом. У этого оператора есть последствия, выходящие за рамки замены одной операции, которая работает только с арифметическими типами. - person chris   schedule 31.12.2017(2 ** sizeof(char)) * (2 ** sizeof(char))
сравнения). - person wvxvw   schedule 01.01.2018(2 ** (sizeof(char) * CHAR_BIT))
? - person iBug   schedule 01.01.2018*a == *b && *a != 0
, то мы уже знаем это*b != 0
, поэтому мы не должны включать эту проверку в цикл. - person Elliott   schedule 10.03.2020