¿Qué es mejor, #define PI o const double PI?

#define reemplaza la misma instancia de “PI” en su código y pone el número 3.14. Esto significa que no tendrá una variable en tiempo de ejecución llamada PI. Si bien no es significativo con un solo número, cuando tiene muchas variables constantes, usarán memoria innecesaria.

#define debería usarse para constantes que son solo eso, constantes, como el número pi.

Otros han mencionado que no se puede rastrear la variable durante la depuración cuando se utiliza define, esto se debe a que en realidad no es una variable, por lo que no hay nada que rastrear. Pero no veo absolutamente ninguna razón para rastrear un número constante que nunca cambiará a lo largo de la existencia del universo.

Otra ventaja de definir sobre una variable constante es que no perderá tiempo buscando la variable, colocando el valor en un registro y pasando la dirección del registro para calcular usando el número, porque el número estará allí en el código. Esto también significa que en ciertas situaciones, el compilador puede hacer varias optimizaciones de código que ni siquiera sé o noto que puede. El compilador tiene muchos trucos en su manga, por lo que debes utilizarlos cuando sea práctico.

En conclusión, creo que deberías usar #define en esta situación, en lugar de una variable constante.

¿Mejor con qué criterio? perfs? legibilidad? riesgo de errores?

para perfs:

Con un número literal, supongo que el optimizador a veces podría mejorar con la definición.
Pero si se define por una función (por ejemplo, acos (-1)) para tener siempre el mejor valor posible, la constante doble es mejor para garantizar una sola evaluación.

para errores:

las definiciones no tienen alcance, además los errores inesperados son fáciles.
No estoy totalmente seguro de que en el contexto de multihilo / multinúcleo, const double nunca provoque el uso de un registro adicional.

Una vez trabajé en algún código donde uno de los encabezados #definía los códigos de caracteres para todo el alfabeto griego. Cuando escribí una función con un parámetro llamado delta, el mensaje de error que recibí no fue de ninguna ayuda.

No se preocupe por la eficiencia del tiempo o el espacio. a menos que esté en un circuito muy cerrado, eso no importará. y si su compilador es bueno, el código de la máquina será el mismo de todos modos. hacer que su código sea fácilmente legible y verificable automáticamente es lo que realmente desea.

En C ++, personalmente usaría const

Las variables de Const están definidas y tipificadas. Se pueden pasar cuando necesita usar un puntero para apuntar a un objeto.

No veo ninguna razón para definir debería usarse sobre const, especialmente en la situación anterior

Una macro es efectivamente solo un hallazgo / reemplazo textual debajo del capó, por lo que tiene la ventaja de no necesitar memoria.

Por otro lado, los const se pueden determinar, puede crear referencias a ellos, y si decide que ya no es necesario o no puede ser const, es mucho más fácil hacer el cambio.

Creo que la preferencia de la mayoría de la gente sería la constante sobre la definición.

More Interesting

¿Qué hace una transformación de Laplace? ¿Qué significa la ecuación? ¿Por qué demonios existe el término 'e ^ -St'?

¿Es la identidad de Euler algo estadounidense, o hay otros países que la usan con frecuencia?

En unos 10 años, ¿qué se necesitará para convertirse en matemático investigador? ¿Cuán realista es conseguir un trabajo como matemático puro?

¿Alguna versión conocida de FOL restringe la especificación universal a expresiones en variables libres introducidas anteriormente?

¿Cómo explicarías el concepto de un logaritmo a un laico?

¿Cuáles son las mejores representaciones matemáticas de la selección natural?

¿Puedes usar la fórmula cuadrática para resolver [matemáticas] 10 (x-8) ^ 6-5 = 0 [/ matemáticas]?

¿Qué es una asíntota?

¿Cuál es la diferencia entre axiomas y postulados?

Cómo simplificar este radical sin una calculadora

¿Cómo anotaste inicialmente en matemáticas? ¿Siempre pudiste obtener una buena puntuación en los exámenes escolares o solo en las juntas? ¿Cuánto tiempo le diste a las matemáticas? ¿Tomaste matrícula? ¿Te uniste a algún instituto de entrenamiento?

¿Cuántas carreras mínimas se requieren para encontrar los 3 mejores caballos más rápidos?

¿Puedo hacer una reinversión parcial de un plan 529?

¿Cómo dividir 3630 por 90? Tengo 4.33333, pero la respuesta es 40.3333. Qué me estoy perdiendo

¿Cuál es un ejemplo simple de un grupo en el que el producto de los conmutadores no necesita ser un conmutador?