Per iniziare, probabilmente sai che const
può 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 const
parola chiave. Personalmente preferisco mettere const
a 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 const
dati 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é const
viene 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?
const
dopo il tipo, ad es.#define MAKE_CONST(T) T const
Invece di in#define MAKE_CONST(T) const T
modo cheMAKE_CONST(int *)
si espanda correttamenteint * const
invece diconst int *
.