Nuestros desarrolladores estrellas agotaron sus provisiones de café, investigando diariamente por la respuesta, hasta que Victoria encontró la solución en Gitea así que ahora la compartimos aquí.
Solución:
Una “función const”, denotada con la palabra clave const
después de una declaración de función, hace que sea un error del compilador que esta función de clase cambie una variable miembro de la clase. Sin embargo, la lectura de variables de clase está bien dentro de la función, pero escribir dentro de esta función generará un error de compilación.
Otra forma de pensar en tal “función const” es ver una función de clase como una función normal que toma un implícito this
puntero. Entonces un método int Foo::Bar(int random_arg)
(sin la const al final) da como resultado una función como int Foo_Bar(Foo* this, int random_arg)
y una llamada como Foo f; f.Bar(4)
corresponderá internamente a algo como Foo f; Foo_Bar(&f, 4)
. Ahora agregando la const al final (int Foo::Bar(int random_arg) const
) puede entonces entenderse como una declaración con un puntero const this: int Foo_Bar(const Foo* this, int random_arg)
. Dado que el tipo de this
en tal caso es const, no es posible modificar las variables miembro.
Es posible aflojar la restricción de “función const” de no permitir que la función escriba en ninguna variable de una clase. Para permitir que se pueda escribir en algunas de las variables, incluso cuando la función está marcada como una “función const”, estas variables de clase se marcan con la palabra clave mutable
. Por lo tanto, si una variable de clase está marcada como mutable, y una “función const” escribe en esta variable, entonces el código se compilará limpiamente y es posible cambiar la variable. (C++11)
Como es habitual cuando se trata de const
palabra clave, cambiando la ubicación de la const key palabra en una declaración de C++ tiene significados completamente diferentes. El uso anterior de const
solo se aplica al agregar const
al final de la declaración de la función después del paréntesis.
const
es un calificador muy usado en exceso en C++: la sintaxis y el orden a menudo no son sencillos en combinación con punteros. Algunas lecturas sobre const
corrección y la const
palabra clave:
Corrección constante
La declaración ‘const’ de C++: por qué y cómo
Considere dos variables de tipo de clase:
class Boo ... ;
Boo b0; // mutable object
const Boo b1; // non-mutable object
Ahora puedes llamar ninguna función miembro de Boo
en b0
pero sólo const
-funciones de miembros calificados en b1
.
Bar
se garantiza que no cambiará el objeto en el que se está invocando. Consulte la sección sobre corrección de const en las preguntas frecuentes de C++, por ejemplo.
Comentarios y calificaciones del tutorial
Finalizando este artículo puedes encontrar las observaciones de otros sys admins, tú igualmente puedes mostrar el tuyo si te gusta.