Pregunta

En C ++, la firma de una función depende en parte de si es constante o no. Esto significa que una clase puede tener dos funciones miembro con firmas idénticas, excepto que una es constante y la otra no. Si tiene una clase como esta, entonces el compilador decidirá a qué función llamar en función del objeto al que la llame: si es una instancia constante de la clase, se llamará a la versión const de la función; si el objeto no es constante, se llamará a la otra versión.

¿En qué circunstancias podría aprovechar esta función?

¿Fue útil?

Solución

Esto realmente solo tiene sentido cuando la función miembro devuelve un puntero o una referencia a un miembro de datos de su clase (o un miembro de un miembro, o un miembro de un miembro de un miembro, ... etc.). En general, el rechazo a los punteros o referencias no constantes a los miembros de datos está mal visto, pero a veces es razonable, o simplemente muy conveniente (por ejemplo, [] operador). En tales casos, se proporcionan versiones const y no constantes del getter. De esta manera, la decisión sobre si el objeto se puede modificar o no depende de la función que lo utiliza, que tiene la opción de declararlo constante o no constante.

Otros consejos

Está allí para que pueda hacer que el compilador haga cumplir si devuelve un objeto const o un objeto normal, y aún mantiene la misma firma de método. Hay una explicación detallada en Corrección de constricción .

Es posible que desee utilizarlo para decidir si devolver o no una referencia constante a un objeto o no. Los contenedores de STL utilizan una función const (over) precede () y end () para decidir si devolver un const_iterator o un iterador normal.

Eche un vistazo al comportamiento de std :: map :: operator []. La versión const lanza un error si intenta hacer referencia a una clave no válida, pero la versión no constante hace una inserción. El comportamiento de inserción es mucho más práctico que tener que usar std :: map :: insert (y además hará una sobrescritura) pero no puede funcionar para un mapa de const.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top