c++ - ¿Cuál es la importancia de hacer que una variable sea una constante?
variables constants (5)
¿En qué situación necesitarías hacer una variable constante?
Si quisiera que una variable mantuviera siempre el mismo valor, ¿no podría simplemente no cambiarla?
Garantias
Si fueras un programador perfecto, claro, simplemente no cambies la variable. Pero seis meses después, cuando no ha mirado este archivo en mucho tiempo y necesita hacer un cambio menor, es posible que no recuerde que su variable no debería cambiar. Y si se escribe otro código con esa suposición, es una receta para el desastre.
Esto se multiplica por diez si se trabaja
con
personas en un proyecto.
Un comentario que dice
/* plz don''t change this variable kthx */
es una cosa, pero hacer que el compilador
/* plz don''t change this variable kthx */
cumplir esa restricción es mucho más difícil de ignorar.
Optimizaciones
Las constantes no pueden ser modificadas. Esto le permite al compilador hacer muchas cosas inteligentes con ellos. Si escribo
const int foo = 5;
int some_function() {
return foo;
}
El compilador solo puede tener
some_function
retorno
5
, porque
foo
nunca cambiará.
Si
foo
no fuera
const
,
some_function
siempre tendría que ir a leer el valor actual de la variable.
Además, si tengo
const char foo[] = "Ashton Bennett is a cool C++ programmer";
...
// Somewhere else in the file
const char bar[] = "Ashton Bennett is a cool C++ programmer";
No hay razón para que existan ambas cuerdas. Si el compilador puede probar que nunca toma una referencia a ninguno de ellos, puede plegar las constantes en una, ahorrando espacio.
Aunque no puedo encontrar un caso en el que esto sea probable / una buena práctica en este momento, tenga en cuenta que las funciones de los miembros (y las funciones gratuitas, por supuesto) se pueden sobrecargar en
const
:
struct Foo {
void Bar() {
// One thing
}
void Bar() const {
// Another thing
}
};
// Later somewhere;
// which function gets called depends on
// whether the_foo is const or not
the_foo.Bar();
Por lo tanto, hacer una
const
puede cambiar la función que se llama durante la resolución de sobrecarga.
De acuerdo con la respuesta aceptada, pero una consideración menos común es la siguiente:
Los datos constantes estáticos se pueden colocar en un segmento de memoria de solo lectura. En algunos sistemas, esto puede significar literalmente que puede residir en la ROM.
Usted puede pensar, bueno, ¿por qué hacer esto? Bueno, considere algo como el Ardruino Nano, por ejemplo, tiene la friolera de 2KB de RAM.
El mapeo de los datos de solo lectura del programa solo se puede hacer cuando el mapa de memoria del programa incluye el segmento ROM, y en muchas computadoras que solo se aplicarían al cargador de arranque, porque el resto del código se carga desde archivos (incluso si esos archivos residen) en ROM como en un teléfono móvil). Sin embargo, lo he visto hacer así, pero también he visto sistemas en los que los segmentos de solo lectura (y los segmentos de código) se copian en la RAM al inicio para mejorar la velocidad.
La razón más importante es evitar los errores.
Al marcar algo como
const
, permite que el compilador detecte cualquier intento de cambiarlo.
Por ejemplo, imagine que alguna variable se pasa por referencia a una función que la cambia.
Si marcó esa variable
const
, el compilador capturará eso.
Si no lo hace, tendrá un error que tendrá que encontrar y solucionar, con suerte antes de que cause algunos problemas graves.
Las variables de marcado, las funciones de los miembros de la clase, los parámetros y las referencias
const
permiten que se detecte una gran cantidad de errores que fácilmente podrían agregarse involuntariamente en el código complejo en el momento de la compilación, antes de que tengan la posibilidad de hacer que un programa se ejecute incorrectamente.
Producir código sin errores es difícil y cualquier herramienta que pueda ayudarnos significativamente a hacer esto es bienvenida.
Sí, pero no tiene en cuenta que rara vez trabajará en un proyecto por sí mismo y que el código que escribe puede estar disponible después de que se haya ido, por lo que una persona no podrá hacerle una pregunta sobre una variable y su uso. . Al marcarlo como constante, le está diciendo a todos "este valor nunca debe cambiarse en el código"