Véndeme corrección constante
Entonces, ¿por qué exactamente se recomienda utilizarlo const
con la mayor frecuencia posible? Me parece que usarlo const
puede ser más molesto que una ayuda en C++. Pero, de nuevo, lo hago desde la perspectiva de Python: si no quieres que se cambie algo, no lo cambies. Dicho esto, aquí hay algunas preguntas:
Parece que cada vez que marco algo como
const
, aparece un error y tengo que cambiar alguna otra función en algún lugar para queconst
también esté disponible. Entonces esto hace que tenga que cambiar otra función en otro lugar. ¿Es esto algo que se vuelve más fácil con la experiencia?¿Los beneficios del uso son
const
realmente suficientes para compensar el problema? Si no tiene la intención de cambiar un objeto, ¿por qué no simplemente no escribir código que lo cambie?
Debo señalar que en este momento estoy más centrado en los beneficios de utilizarlo const
con fines de corrección y mantenimiento, aunque también es bueno tener una idea de las implicaciones en el rendimiento.
Este es el artículo definitivo sobre "corrección constante": https://isocpp.org/wiki/faq/const-correctness .
En pocas palabras, usar const es una buena práctica porque...
Le protege de cambiar accidentalmente variables que no deben cambiarse,
Le protege de realizar asignaciones de variables accidentales. Por ejemplo, estás protegido de
if( x = y ) // whoops, meant if( x == y ).
El compilador puede optimizarlo.
Al mismo tiempo, el compilador puede generar código más eficiente porque sabe exactamente cuál será el estado de la variable/función en todo momento. Si está escribiendo código C++ estricto, esto es bueno.
Tiene razón en que puede ser difícil usar la corrección constante de manera consistente, pero el código final es más conciso y más seguro para programar. Cuando desarrollas mucho en C++, los beneficios de esto se manifiestan rápidamente.
Aquí hay un fragmento de código con un error común contra el cual la corrección constante puede protegerlo:
void foo(const int DEFCON)
{
if (DEFCON = 1) //< FLAGGED AS COMPILER ERROR! WORLD SAVED!
{
fire_missiles();
}
}
Parece que cada vez que marco algo como constante, aparece un error y tengo que cambiar alguna otra función en algún lugar para que también sea constante. Entonces esto hace que tenga que cambiar otra función en otro lugar. ¿Es esto algo que se vuelve más fácil con la experiencia?
Por experiencia, esto es un mito total. Sucede cuando un código no constante correcto se encuentra con un código constante correcto, claro. Si diseña const-correct desde el principio, esto NUNCA debería ser un problema. Si hace que algo sea constante y luego algo más no se compila, el compilador le está diciendo algo extremadamente importante y debe tomarse el tiempo para arreglarlo correctamente .
Si usa const rigurosamente, se sorprenderá de las pocas variables reales que hay en la mayoría de las funciones. A menudo no es más que un contador de bucles. Si su código está llegando a ese punto, obtendrá una sensación cálida en su interior... validación por compilación... el ámbito de la programación funcional está cerca... casi puede tocarlo ahora...