Версия шаблона std:: abs
здесь список текущих перегрузок std::abs
в C++. Мне интересно, почему бы просто не определить следующий шаблон и не отпустить все уродливые перегрузки в стиле C?
template <typename T> inline
T abs(const T& v) { return v < 0 ? -v : v; }
3 ответов
посмотреть LWG выпуск 2192. В настоящее время std::abs(x-y) < 2
, Если не x
и y
неподписанные. Это ловит тонкую ошибку программирования. С предлагаемым изменением он компилируется, но делает это совершенно неправильно. abs(3u-4u)
было бы намного больше, чем 2, на самом деле это UINT_MAX
.
Это страдает обычной проблемой сопоставления всего.
пример типа, для которого abs
имеет смысл, но эта реализация не является complex<double>
.
потому что тип ' T ' может получить доступ к любому типу данных, включая char. Итак, что вы ожидаете, если кто-то передаст символ функции abs. :)