Pour commencer, vous savez probablement que cela const
peut être utilisé pour rendre les données d'un objet ou un pointeur non modifiables ou les deux.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Cependant, vous pouvez également utiliser la syntaxe:
Object const *obj; // same as const Object* obj;
La seule chose qui semble avoir de l'importance, c'est de quel côté de l'astérisque vous mettez le const
mot - clé. Personnellement, je préfère mettre const
à gauche du type pour spécifier que les données ne sont pas modifiables car je trouve qu'elles se lisent mieux dans mon état d'esprit de gauche à droite, mais quelle syntaxe est venue en premier?
Plus important encore, pourquoi y a-t-il deux façons correctes de spécifier les const
données et dans quelle situation préféreriez-vous ou auriez-vous besoin de l'une par rapport à l'autre, le cas échéant?
Éditer:
Il semble donc que ce soit une décision arbitraire lorsque la norme sur la façon dont les compilateurs doivent interpréter les choses a été rédigée bien avant ma naissance. Depuis const
est appliqué à ce qui est à gauche du mot-clé (par défaut?) Je suppose qu'ils ont pensé qu'il n'y avait aucun mal à ajouter des "raccourcis" pour appliquer des mots-clés et des qualificatifs de type d'une autre manière au moins jusqu'à ce que la déclaration change par analyse d'un * ou & ...
C'était aussi le cas en C alors je suppose?
const
après le type, par exemple#define MAKE_CONST(T) T const
au lieu de#define MAKE_CONST(T) const T
pour que celaMAKE_CONST(int *)
se développe correctement versint * const
au lieu deconst int *
.