Здравствуйте, Pzz, Вы писали:
Pzz>Выглядит как-то несимметрично. И такое сравнение с тремя вариантами ответов — это одна ассемблерная команда для целочисленных типов (и еще одна-две, чтобы нормализовать результат). И такое сравнение очень часто встречается.
Pzz>Но заводить для него еще один мутный оператор...
Этот оператор непротиворечивым способом вводит все операторы сравнения.
Во-первых, без него тебе пришлось бы писать 6 штук. Выразив их через <, например.
Во-вторых, троичное сравнение экономнее — если сравнение является дорогой операцией (например, для строк)
if (a < b) { ... } // сравнили раз
else if (b < a) { ... } // сравнили два
else { ... }
// vs
auto c = (a <=> b); // результат может быть разных типов - weak / partial / strong ordering
if (c < 0) { ... }
else if (c > 0) { ... }
else if (c == 0) { ... }
else { ... } // несравнимые - например, если один из операндов - NaN
Pzz>А почему нет оператора, который возвращает за раз частное и остаток от деления? Тоже тот случай, когда результат даёт одна ассемблерная команда, а по-сишному надо писать две строки (которые развернутся в две одинаковые команды, если компилятор достаточно наивен).
функция std::div
https://en.cppreference.com/w/cpp/numeric/math/div
которая может быть реализована на конкретной платформе через какой-нибудь интринсик.