Para empezar, probablemente sepa que const
puede usarse para hacer que los datos de un objeto o un puntero no sean modificables o ambos.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Sin embargo, también puede usar la sintaxis:
Object const *obj; // same as const Object* obj;
Lo único que parece importar es qué lado del asterisco coloca la const
palabra clave. Personalmente, prefiero poner const
a la izquierda del tipo para especificar que sus datos no se pueden modificar, ya que creo que se lee mejor en mi mentalidad de izquierda a derecha, pero ¿qué sintaxis vino primero?
Más importante aún, ¿por qué hay dos formas correctas de especificar const
datos y en qué situación preferiría o necesitaría una sobre la otra si la hubiera?
Editar:
Parece que esta fue una decisión arbitraria cuando el estándar de cómo los compiladores deberían interpretar las cosas fue redactado mucho antes de que yo naciera. Dado que const
se aplica a lo que está a la izquierda de la palabra clave (¿de manera predeterminada?) Supongo que pensaron que no era perjudicial agregar "accesos directos" para aplicar palabras clave y calificadores de tipo de otras maneras, al menos hasta el momento en que la declaración cambie analizando un * o & ...
Este fue el caso también en C, entonces supongo.
const
después del tipo, por ejemplo, en#define MAKE_CONST(T) T const
lugar de#define MAKE_CONST(T) const T
para queMAKE_CONST(int *)
se expanda correctamente enint * const
lugar deconst int *
.