LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Так на этапе компиляции же проверять, данный кода вообще не скомпилируется, а потому будет абсолютно быстрым.

Я имею в виду тривиальное

unsigned f(unsigned a, unsigned b, unsigned c)
{
  return (a+b)*c*2+3;
}

Если нельзя оборачивать через 0, то здесь будет четыре условных операции. И если вдруг шаблон разворачивается в a+b-b, то нельзя заменять на a, надо вычислять сумму и проверять на переполнение.

Исходная версия monk, :

Так на этапе компиляции же проверять, данный кода вообще не скомпилируется, а потому будет абсолютно быстрым.

Я имею в виду тривиальное

unsigned f(unsigned a, unsigned b, unsigned c)
{
  return (a+b)*c/2+3;
}

Если нельзя оборачивать через 0, то здесь будет четыре условных операции. И если вдруг шаблон разворачивается в a+b-b, то нельзя заменять на a, надо вычислять сумму и проверять на переполнение.