Algunos usos de const en realidad no tiene mucho sentido.
Suponga que tiene la siguiente función:
void myFunction (const int value);
La const le dice al compilador que el valor no debe cambiar dentro de la función. Esta información no tiene ningún valor para la persona que llama.Depende de la función en sí decidir qué hacer con el valor. Para la persona que llama, las siguientes dos definiciones de funciones se comportan exactamente lo mismo por él:
void myFunction (const int value);
void myFunction (int value);
Puesto que el valor se pasa por valor, lo que significa que la función obtiene una copia local de todos modos.
Por otro lado, si el argumento es una referencia o un puntero, las cosas se vuelven muy diferentes.
void myFunction (const MyClass &value);
Esto le dice a la persona que llama que el valor se pasa por referencia (por lo que detrás de las pantallas en realidad es un puntero), pero la persona que llama se compromete a no cambiar el valor. Lo mismo es cierto para los punteros:
void myFunction (const MyClass *value);
Se pasa un puntero a MiClase (debido a razones de rendimiento), pero la función se compromete a no cambiar el valor.
Si queremos escribir lo siguiente:
void myFunction (MyClass * const value);
Entonces estamos de vuelta int primera situación. myFunction obtiene un puntero, que se pasa por valor y que es const. Como MyFunction obtiene una copia del valor del puntero, no importa para quien llama si es const o no. Lo más importante es que myFunction puede cambiar el contenido del valor, porque la variable del puntero en sí es const, pero el contenido no es.
Lo mismo es cierto para los valores de retorno:
const double squareRoot(double d);
Esto no tiene ningún sentido. squareRoot devuelve una doble const pero como esto se pasa 'por valor', y por lo tanto necesita ser copiado a mi propia variable local, puedo hacer lo que quiera con ella.
Por otro lado:
const Customer *getCustomer(char *name);
me dice que GetCustomer me devuelve un puntero a un cliente, y no se me permite cambiar el contenido del cliente.
En realidad, sería mejor hacer la const char-puntero-contenidos, así, ya no espero que la función para cambiar la cadena dada:
const Customer *getCustomer(const char *name);
dado cuenta de que funcs métodos constantes no tienen nada que ver con la modificación de parámetros, pero más acerca de cómo modificar las variables de clase. – Jor