Para empezar, probablemente sepa que constpuede 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 constpalabra clave. Personalmente, prefiero poner consta 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 constdatos 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 constse 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.
constdespués del tipo, por ejemplo, en#define MAKE_CONST(T) T constlugar de#define MAKE_CONST(T) const Tpara queMAKE_CONST(int *)se expanda correctamente enint * constlugar deconst int *.