daniel scoco
Estaba leyendo mi libro de C++ (Deitel) cuando encontré una función para calcular el volumen de un cubo. El código es el siguiente:
double cube (const double side){
return side * side * side;
}
La explicación para usar el calificador “const” fue esta: “El calificador const debe usarse para hacer cumplir el principio de privilegio mínimo, diciéndole al compilador que la función no modifica el lado de la variable”.
Mi pregunta: ¿no es el uso de “const” redundante/innecesario aquí ya que la variable se pasa por valor, por lo que la función no puede modificarla de todos modos?
Ernest Friedman-Hill
los const
El calificador evita que el código dentro de la función modifique el parámetro en sí. Cuando una función es más grande que un tamaño trivial, tal seguridad lo ayuda a leer y comprender rápidamente una función. Si sabes que el valor de side
no cambiará, entonces no tiene que preocuparse por mantener un registro de su valor a lo largo del tiempo mientras lee. En algunas circunstancias, esto podría incluso ayudar al compilador a generar un mejor código.
Un número no trivial de personas hace esto como una cuestión de rutina, considerándolo generalmente de buen estilo.
-
¿Por qué “también”? Ese es todos lo hace.
–Keith Thompson
3 de enero de 2012 a las 18:12
-
@KeithThompson: de hecho, eso es todo lo que hace, pero el OP está pensando en los parámetros de referencia constante, donde el
const
le impide cambiar el objeto original.– Ernest Friedman-Hill
3 de enero de 2012 a las 18:49
-
“Bajo algunas circunstancias, esto podría incluso ayudar al compilador a generar un mejor código”. Cita necesaria.
– Farap
15/07/2018 a las 18:45
-
Sigo pensando que es redundante. Si lo encuentra útil en funciones grandes, entonces hay algo mal con sus funciones, no con sus parámetros.
– Trampa
2 de febrero a las 16:20
psur
Puedes hacer algo como esto:
int f(int x)
{
x = 3; //with "const int x" it would be forbidden
// now x doesn't have initial value
// which can be misleading in big functions
}
-
@snakedoctor Gente mala. La gente mala lo hace. 🙂
– Ernest Friedman-Hill
04/04/2019 a las 19:30
-
No relacionado con la pregunta del OP.
– lukasl1991
17 de mayo de 2019 a las 7:08
El significado de
const
aquí es que no se puede modificarside
parámetro dentrocube()
método para evitar comportamientos inesperados.– Tomasz Nurkiewicz
3 de enero de 2012 a las 15:09
a veces las cosas se tratan más de ‘buenas prácticas’ que de necesidad. Creo que este es uno de esos momentos.
– destan
3 de enero de 2012 a las 15:11
Creo que las respuestas hicieron un buen trabajo al explicar por qué harías eso, pero solo agregaré eso a una llamada externa, el
const
es redundante y no es parte de la firma de la función. Eso significa que puede omitirlo en la declaración de la función sin cambiar nada. También puede eliminarlo más tarde si por alguna razón desea que su código sea menos mantenible y no afectará el código de llamada.–Matthew Crumley
3 de enero de 2012 a las 16:37
Una cosa que no me gusta es que me obliga a (a) hacer el
const
visible en la declaración, donde no tiene sentido, o (b) hacer que la declaración y la definición sean inconsistentes. Supongo que la solución es superar mis dudas sobre (b).–Keith Thompson
3 de enero de 2012 a las 18:15
En Java, el
final
Se requiere una palabra clave en la misma ubicación para que los cierres funcionen correctamente al declarar una clase anónima dentro de la función. ¿Podría ser lo mismo para C++?– Izkatá
3 de enero de 2012 a las 20:33