¿Existe algún argumento para usar las macros de límites numéricos (por ejemplo, INT64_MAX) sobre std :: numeric_limits? Por lo que entiendo, numeric_limits está en el estándar, pero las macros están solo en C99, por lo que no son estándar.INT_ [MIN | MAX] macros de límite vs numeric_limits <T>
Respuesta
Si C++, use numeric_limits
, fin de.
EDITAR: Bien, según el comentario de James, no "fin de". - Las excepciones son plantillas y etiquetas de casos. Pero no puedo ver el uso de una etiqueta de caja para el mínimo o máximo, o una plantilla para ellos, pero supongo que no he visto todas las posibilidades ...
Supongo que mi punto es que la plantilla numeric_limits
es más útil más allá de max()
y min()
...
En ciertos contextos (por ejemplo case
etiquetas no tipo de parámetros de plantilla,) se espera una constante numérica, y numeric_limits
no soporta este: numeric_limits<int>::max()
no es una constante. En las etiquetas case
, debe usar INT_MAX
en su lugar.
Esto es muy molesto pero oigo que C++ 11 solucionará esto.
Pre C++ 0x, definitivamente. INT_MIN
y INT_MAX
son expresiones constantes integrales; numeric_limits<int>::min()
y numeric_limits<int>::max()
no lo son. <climits>
es C++ estándar, y a menos que se trate de plantillas (donde no se sabe si es int
o long
), realmente no hay razón para preocuparse por la solución demasiado complicada. (También: si está plantillas de escritura, no se olvide de que numeric_limits<int>::min()
y numeric_limits<double>::min()
representan completamente diferentes atributos, si desea que el valor mínimo posible, tendrá que numeric_limits<T>::is_integer ? numeric_limits<T>::min() : -numeric_limits<T>::max()
.)
Agregaría que el argumento de expresión constante integral solo cuenta, si desea usar los valores en las plantillas. – Xeo
@Xeo: Eso no es verdad. También importa cuando estás inicializando una clase estática. – MSalters
@MSalters,?no se puede inicializar una clase estática integral sin una constante integral? – Nim
Las otras respuestas en su mayoría tienen la información correcta, pero parece que esto necesita actualización para C++ 11.
En C++ 11, std::numeric_limits<T>::min()
, std::numeric_limits<T>::max()
y std::numeric_limits<T>::lowest()
están todos declararon constexpr
, para que puedan ser utilizables en la mayor parte de los mismos contextos como INT_MIN
y compañía. La única excepción en la que puedo pensar es en el procesamiento de cadenas en tiempo de compilación utilizando el token de stringificación #
.
Esto significa que numeric_limits
se puede utilizar para las etiquetas de caso, los parámetros de plantilla, etc., y se obtiene el beneficio de usar en el código genérico (trate de usar INT_MIN
vs LONG_MIN
en template<typename T> get_min(T t);
).
C++ 11 también ofrece una solución al problema de James Kanze, agregando std::numeric_limits<T>::lowest()
, que proporciona el valor finito más bajo para todos los tipos, en lugar del valor más bajo para tipos enteros y el valor positivo más bajo para flotación tipos de puntos
- 1. MIN/MAX vs ORDER BY y LIMIT
- 2. ¿Por qué C++ numeric_limits <enum_type> :: max() == 0?
- 3. LINQ (MIN MAX &&)
- 4. Python max and min
- 5. Cómo solucionar la definición inconsistente de numeric_limits <T> :: min()?
- 6. elemento de Max/Min sin utilizar IComparable <T>
- 7. Usando numeric_limits :: max() en las expresiones constantes
- 8. x86 max/min asm instructions?
- 9. std :: cin.ignore (std :: numeric_limits <std :: streamsize> :: max(), '\ n') de error al utilizar # include <Windows.h>
- 10. Seleccione MAX u Orden Por Límite 1
- 11. advertencia C4003 y errores C2589 y C2059 en: x = std :: numeric_limits <int> :: max();
- 12. JMeter max. límite de hilo
- 13. Templatized branchless int max/min función
- 14. ¿Hay una función numpy max min?
- 15. Especifique max y min para Random.nextInt()?
- 16. fila TSQL Seleccionar Min & Max al agrupar
- 17. std: numeric_limits <double> :: epsilon definition
- 18. Lisp: macros vs funciones
- 19. : = vs = en macros maquillaje
- 20. funciones Freemarker vs macros
- 21. SQL por qué es SELECT COUNT (*), MIN (col), MAX (col) más rápido que SELECT MIN (col), MAX (col)
- 22. Problema con numeric_limits
- 23. Clase de cronómetro que muestra min, max, average, ... times?
- 24. Encontrar min/max de bezier cuadrático con CoreGraphics
- 25. Max/Min para conjuntos completos de registros en PIG
- 26. ejemplo sencillo sqlalchemy de `sum`,` average`, `min`,` max`
- 27. complejidad Tiempo para obtener los elementos de max-min montón
- 28. ¿Cómo obtener min/max de dos enteros en Postgres/SQL?
- 29. .Max() vs OrderByDescending(). Primero()
- 30. Usando Crossfilter, ¿es posible rastrear max/min cuando se agrupa?
Pruébelo en un contexto donde se requiere una expresión constante integral. Diga la instancia de una plantilla, o en una etiqueta de caso. O para tipos más pequeños, como una dimensión de matriz ('UCHAR_MAX + 1' es frecuente). –
@James, hmm ... bien, voy a editar para las plantillas y las etiquetas de las cajas, aunque no estoy seguro sobre las dimensiones de la matriz ... – Nim
Nota importante: dado que C++ 11 'std :: numeric_limits :: max()' es 'constexpr', entonces, la excepción ya no es válida. –
juanchopanza