Re[4]: Внезапно, ||= и &&=
От: Кодт Россия  
Дата: 10.08.25 04:03
Оценка:
Здравствуйте, 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
которая может быть реализована на конкретной платформе через какой-нибудь интринсик.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.