История изменений
Исправление 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
, надо вычислять сумму и проверять на переполнение.