Подтвердить что ты не робот

Версия шаблона std:: abs

Здесь перечислены текущие перегрузки std::abs в С++. Мне интересно, почему бы не просто определить следующий шаблон и отпустить все уродливые перегрузки C-стиля?

template <typename T> inline
T abs(const T& v) { return v < 0 ? -v : v; }
4b9b3361

Ответ 1

См. LWG-выпуск 2192. В настоящее время std::abs(x-y) < 2 терпит неудачу, если x и y не указаны. Это улавливает тонкую ошибку программирования. С предлагаемым изменением он компилирует, но делает все в порядке. abs(3u-4u) будет намного больше 2, на самом деле это UINT_MAX.

Ответ 2

Это относится к обычной проблеме соответствия всем.

Пример типа, для которого abs имеет смысл, но эта реализация не является complex<double>.

Ответ 3

Поскольку тип 'T' может получить доступ к любому типу данных, включая char. Итак, что вы ожидаете, если кто-то передаст char функции abs.:)