c++ - Versión de plantilla de std:: abs
templates cmath (3)
Here enumeran las sobrecargas actuales de std::abs
en C ++. Me pregunto ¿por qué no solo definir la siguiente plantilla y dejar ir todas las sobrecargas de estilo C?
template <typename T> inline
T abs(const T& v) { return v < 0 ? -v : v; }
Esto sufre el problema habitual de emparejar todo.
Un ejemplo de un tipo para el que abs
tiene sentido pero esta implementación no es complex<double>
.
Porque el tipo ''T'' puede acceder a cualquier tipo de datos, incluido el char. Entonces, ¿qué esperas si alguien pasa una charla a la función de abs? :)
Ver el número 2192 de LWG . Actualmente, std::abs(xy) < 2
falla si y
son sin signo. Esto atrapa un error de programación sutil. Con el cambio propuesto, compila pero hace todo esto incorrectamente. abs(3u-4u)
sería mucho más grande que 2, de hecho es UINT_MAX
.