Per iniziare, probabilmente sai che constpuò essere utilizzato per rendere i dati di un oggetto o un puntatore non modificabili o entrambi.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Tuttavia puoi anche usare la sintassi:
Object const *obj; // same as const Object* obj;
L'unica cosa che sembra avere importanza è da che parte dell'asterisco inserisci la constparola chiave. Personalmente preferisco mettere consta sinistra del tipo per specificare che i suoi dati non sono modificabili in quanto trovo che leggano meglio nella mia mentalità da sinistra a destra ma quale sintassi è arrivata per prima?
Ancora più importante perché ci sono due modi corretti per specificare i constdati e in quale situazione preferiresti o avresti bisogno l'uno rispetto all'altro?
Modificare:
Quindi sembra che questa sia stata una decisione arbitraria quando lo standard su come i compilatori dovrebbero interpretare le cose è stato redatto molto prima che io nascessi. Poiché constviene applicato a ciò che si trova a sinistra della parola chiave (per impostazione predefinita?) Immagino che abbiano pensato che non ci fosse nulla di male nell'aggiungere "scorciatoie" per applicare parole chiave e digitare qualificatori in altri modi almeno fino a quando la dichiarazione cambia da analizzando un * o & ...
Questo è stato il caso anche in C, quindi presumo?
constdopo il tipo, ad es.#define MAKE_CONST(T) T constInvece di in#define MAKE_CONST(T) const Tmodo cheMAKE_CONST(int *)si espanda correttamenteint * constinvece diconst int *.