Pour commencer, vous savez probablement que cela constpeut ê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 constmot - 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 constdonné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 constest 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?
constaprès le type, par exemple#define MAKE_CONST(T) T constau lieu de#define MAKE_CONST(T) const Tpour que celaMAKE_CONST(int *)se développe correctement versint * constau lieu deconst int *.