2010-04-30 7 views
11

En C++ Quelle est la différence entre char const *ptr=&ch; et const char *ptr=&ch;Déclaration des pointeurs en C++

+1

Il n'y a pas de différence, pour plus d'informations: http://duramecho.com/ComputerInformation/WhyHowCppConst.html – Akanksh

+1

duplication possible de http://stackoverflow.com/questions/2211954/difference-between-these-two-const -pointer-declarations-c – starblue

+1

En outre, vous pouvez utiliser [cdecl.org] (http://cdecl.org) – bashor

Répondre

32

Ils sont identiques, c'est-à-dire pointer to const char.

Cependant char * const ptrest différent, étant un const pointer to (non-const) char.

Et juste pour compléter l'ensemble, const char * const ptr est un const pointer to const char.

+2

+1. Réponse complète – ereOn

+1

Ceci est un bon exemple pour tenter de mettre le 'const' qualifié * après * le type qualifié. 'char const *' semble bizarre à beaucoup de gens mais c'est cohérent avec 'char const * const'. –

7

Aucune différence en C++.

Il est important que const soit avant * ou après *.

6

Const s'applique à tout ce qui est sur sa gauche immédiate (sauf s'il n'y a rien, auquel cas il s'applique à ce qui est son droit immédiat). Donc, il n'y a pas de différence.

char * const ptr serait un pointeur de const à la valeur variable cependant.

2

D'autres réponses ont couvert la solution technique - vos deux exemples sont les mêmes.

Beaucoup de gens préfèrent lire de droite à gauche lorsqu'ils traitent const en C++. En anglais, nous aimons penser à un X constant, alors que C++ aime analyser X const. La lecture de droite à gauche donne un résultat plus anglais.

Un exemple assez extrême:

C const * bar(A * const, B const * const) const; 

De droite à gauche ce lit comme « une fonction constante bar prenant comme paramètres un pointeur constant à un A et un pointeur constant à une B constante, renvoyant un pointeur sur une constante C '. Notez que les trois types de pointeurs sont différents.

+1

Si quelqu'un est intéressé, le livre 'C++ Gotchas' de Stephen C. Dewhurst parle de cette technique de déclaration de pointeurs. – TheJuice

0

char const *ptr=&ch; et const char *ptr=&ch; signifie que char est const, où le pointeur est variable (ou peut être modifié).

Mais dans le cas de char * const ptr, vous ne pouvez pas réaffecter le pointeur une fois que vous l'avez défini. donc c'est un pointeur const vers une chaîne de caractères.

Questions connexes