2 votes

Différence entre const ref et const pointeur, c++

Je voudrais savoir quelle est la différence entre const ref et const pointeur en c ++. Lorsque je déclare quelque chose comme étant const ref, puis-je changer sa VALEUR? ou le const va sur l'objet? Parce que je sais que const pointeur signifie que vous ne pouvez pas changer le POINT mais vous pouvez changer la VALEUR à laquelle il pointe.

par exemple:

const char& a; // ?
const char* a; // pointeur est const

5voto

user1055604 Points 917

Fred const& x;

Cela signifie que x alias un objet Fred, mais x ne peut pas être utilisé pour changer cet objet Fred.

Fred const* p;

Fred const* p signifie "p pointe vers un Fred constant" : l'objet Fred ne peut pas être modifié via p.

Fred* const p;

Fred* const p signifie "p est un pointeur constant vers un Fred" : vous ne pouvez pas modifier le pointeur p, mais vous pouvez modifier l'objet Fred via p.


Il est possible de combiner les deux derniers pour obtenir :

Fred const* const p;

Fred const* const p signifie "p est un pointeur constant vers un Fred constant" : vous ne pouvez pas changer le pointeur p lui-même, ni modifier l'objet Fred via p.

Pour en savoir plus à ce sujet, visitez ce lien.

2voto

smocking Points 2153

const char* a; // pointeur est constant

Faux, c'est un pointeur vers une constante. Ceci :

char* const a; // pointeur est constant

est un pointeur constant.

2voto

James Custer Points 827

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X