En el primero, ha prometido al compilador, pero no a otros usuarios de la clase, que no editará la variable.
En su segundo ejemplo, ha prometido a otros usuarios de la clase que no editarán su variable, pero no cumplieron esa promesa.
También debo señalar que hay una clara diferencia entre
bar* const variable
y
const bar* variable
y
const bar* const variable
En la primera forma, el puntero no va a cambiar, pero puede editar el objeto al que apunta. En la segunda forma, puede editar el puntero (señalarlo a otro objeto), pero nunca la variable a la que apunta. En la forma final, no editarás el puntero ni el objeto al que apunta. Reference
Para agregar un poco más de aclaración a la pregunta planteada, siempre se puede prometer MÁS const que menos. Dada una clase:
class Foo {
void func1 (int x);
void func2 (int *x);
}
puede compilar la siguiente implementación:
Foo::func1(const int x) {}
Foo::func2(const int *x) {}
o:
Foo::func1(const int x) {}
Foo::func2(const int* const x) {}
sin ningún problema. Les ha dicho a sus usuarios que posiblemente puedan editar sus variables. En su implementación, le dijo al compilador que esta implementación particular no editará esas variables, aunque le haya dicho a los usuarios que podría hacerlo. No has incumplido una promesa para el usuario, por lo que el código se compila.
¿Quería poner la const en el otro lado del * en su segundo ejemplo? Algunas personas responden explicando la diferencia en el significado de eso, y otras responden explicando la diferencia en si const está en el archivo cpp o h. –
Debe elegir una respuesta a su pregunta o actualizarla si no es la respuesta que está buscando. –