tutorial smart remix programador online español curso c++ const

c++ - remix - smart contracts ethereum



¿Cuál es el significado de una función al final de una función miembro? (3)

Esta pregunta ya tiene una respuesta aquí:

¿Qué significa exactamente la palabra clave const en C ++ cuando está escrita al final de una función miembro (después de la lista de argumentos)?


Las optimizaciones del compilador son posibles, pero la principal ventaja es hacer cumplir el contrato expresado en la declaración de la función: si define una función miembro como const , el compilador impide cualquier modificación al objeto dentro de esa función.

Puede eximir campos individuales en la clase de esta restricción usando mutable en su declaración. Esto es útil, por ejemplo, cuando tiene una clase que encapsula su propio lock_guard, que debe cambiar su valor para imponer la seguridad del hilo incluso dentro de las funciones de los miembros de la const .


Significa que *this es const dentro de esa función miembro, es decir, no altera el objeto.

La palabra clave es una expresión prvalue cuyo valor es la dirección del objeto para el que se llama a la función. El tipo de this en una función miembro de una clase X es X* . Si la función miembro se declara const , el tipo de this es const X* . [sección 9.3.2 §1]

En una función const , se accede al objeto para el que se llama a la función a través de una ruta de acceso const ; por lo tanto, una función miembro miembro no modificará el objeto y sus miembros de datos no estáticos. [sección 9.3.2 §2]

Esto significa que se puede llamar a una función miembro miembro en una instancia const de la clase. No se puede const función de miembro no const en [1] un objeto const , ya que podría intentar modificarlo.

[1] Nota: un temporal no es un objeto const menos que sea de tipo const .


const al final de una firma de función significa que la función debe suponer que el objeto del que es miembro es const . En términos prácticos, significa que le pide al compilador que verifique que la función miembro no modifique los datos del objeto de ninguna manera. Significa pedirle al compilador que verifique que no cambia directamente ningún dato miembro, y no llama a ninguna función que no garantice que no cambiará el objeto.

Cuando crea un objeto const le pide al compilador que se asegure de que ese objeto no cambie más allá de su inicialización. Eso a su vez significa que el compilador comprobará que no cambia directamente sus datos de miembro y que no llama a ninguna función que no garantice que no cambiará el objeto.

Todo esto es parte de la filosofía de const correctness . En esencia, significa que si las cosas funcionan en este momento y no cambiarán, entonces nunca se romperán. En otras palabras, las cosas constantes son más fáciles de trabajar con fiabilidad. Esta característica al final de las firmas de funciones es una herramienta para que prohíba que las cosas se rompan. Esto a su vez significa que debes poner const donde sea que puedas.