c++ templates cmath

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 .