c++ function const overloading

¿Cuál es el uso de la sobrecarga const en C++?



const int (4)

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

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


Eche un vistazo al comportamiento de std :: map :: operator []. La versión de const arroja un error si intenta hacer referencia a una clave inválida, pero la versión no const hace un inserto. El comportamiento de inserción es mucho más útil que tener que usar std :: map :: insert (y además sobrescribirá), pero no puede funcionar para un mapa const.


Está ahí para que pueda hacer que el compilador aplique si devuelve un objeto const o uno normal y aún mantiene la misma firma de método. Hay una explicación detallada en Const Correctness .


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.). Generalmente no se respetan los indicadores de no const o las referencias a los miembros de datos, pero a veces es razonable, o simplemente muy conveniente (por ejemplo, [] operador). En tales casos, proporciona una versión const y una no const del getter. De esta forma, la decisión de si el objeto puede modificarse o no depende de la función que lo utiliza, que tiene la opción de declararlo const o non-const.


Es posible que desee utilizarlo para decidir si desea devolver o no una referencia constante a un objeto. Los contenedores de STL usan una función de inicio () y fin () sobrecargada const para decidir si se devuelve un const_iterator o un iterador normal.