Je préfère écrire ces choses de cette manière : char const * a
vs. char * const a
.
Cela vous permet de lire de droite à gauche : char const * a
signifie que a
est un pointeur vers un char
constant, et char * const a
signifie que a
est un pointeur constant vers un char
. Et si je lis un autre code, je me rappelle simplement que const char* a = char const* a
.
Pour répondre à l'autre partie de votre question : Lorsque je déclare quelque chose en tant que const ref, est-ce que je peux changer sa VALEUR? Les gens utilisent à tort le terme const ref pour signifier en réalité une référence à une constante (puisque une référence constante n'a pas de sens). Donc, const ref const char& a
signifie que vous ne pouvez pas changer la valeur. Mais si vous voulez réellement une référence constante, char& const a
alors vous pouvez changer la valeur et la partie const
ne fait aucune différence.
Pour les pointeurs, const char* a
signifie que vous ne pouvez pas changer la valeur à laquelle a
pointe. Comparez cela à char* const a
qui signifie que vous ne pouvez pas changer le pointeur, mais vous pouvez changer la valeur à laquelle a
pointe.