Здравствуйте, netch80, Вы писали:
N>Также у тебя проверка на (y>0) избыточна для беззнаковых; если заменить на >= в обеих сторонах, то левая для беззнаковых вырождается в true и экономится операция сравнения...
В-о-от! Я это чуть позже тоже сообразил, но уже не стал заморачиваться исправлением. Действительно, если
a + b = c, где
a, b, c — беззнаковые, то выражение:
b >= 0 == c >= a оптимизатор с радостью упростит до
c >= a
N>Интересно, почему MS в своём SafeInt не использует такие простые приёмы. Вместо этого, например, для двух 32-разрядных чисел они складывают используя 64 бита (причём это даже при компиляции в 32-битный код) и проверяют результат на выход за границы. И вообще у них пример того, как не надо писать на C++...
Да набирают туда непонятно кого