Véndeme corrección constante

Resuelto Jason Baker asked hace 15 años • 16 respuestas

Entonces, ¿por qué exactamente se recomienda utilizarlo constcon la mayor frecuencia posible? Me parece que usarlo constpuede 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:

  1. 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 que consttambié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?

  2. ¿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 constcon fines de corrección y mantenimiento, aunque también es bueno tener una idea de las implicaciones en el rendimiento.

Jason Baker avatar Sep 26 '08 06:09 Jason Baker
Aceptado

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...

  1. Le protege de cambiar accidentalmente variables que no deben cambiarse,

  2. Le protege de realizar asignaciones de variables accidentales. Por ejemplo, estás protegido de

    if( x = y ) // whoops, meant if( x == y ).
    
  3. 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.

Jordan Parmer avatar Sep 25 '2008 23:09 Jordan Parmer

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();
   }
}
Doug T. avatar Sep 25 '2008 23:09 Doug T.

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 .

Chris Mayer avatar Sep 26 '2008 00:09 Chris Mayer

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...

QBziZ avatar Sep 27 '2008 00:09 QBziZ