Je vois souvent la déclaration de fonction suivante:déclaration Double const
some_func(const unsigned char * const buffer)
{
}
Toute idée pourquoi le const est répété avant le nom du pointeur?
Merci.
Je vois souvent la déclaration de fonction suivante:déclaration Double const
some_func(const unsigned char * const buffer)
{
}
Toute idée pourquoi le const est répété avant le nom du pointeur?
Merci.
Le premier const dit que les données pointé est constante et ne peuvent pas être modifiés , le deuxième dit que le pointeur lui-même ne peut pas être changé:
char my_char = 'z';
const char* a = &my_char;
char* const b = &my_char;
const char* const c = &my_char;
a = &other_char; //fine
*a = 'c'; //error
b = &other_char; //error
*b = 'c'; //fine
c = &other_char; //error
*c = 'c'; //error
+1 Mais pourrais-je suggérer d'ajouter des exemples démontrant que les pointeurs const ne peuvent pas être réaffectés. (c'est-à-dire, 'char * const x = NULL; x = & some_char;') – Eric
@Eric Je crois que j'ai déjà inclus que 'b = & other_char; // erreur' – wich
Je crois que je dois faire plus attention :) Mes excuses – Eric
Cela en fait un pointeur const à une valeur const, plutôt qu'un pointeur mutable à une valeur const ou un pointeur const à une valeur mutable.
Il est un pointeur constant à un unsigned char constant. Vous ne pouvez pas changer le pointeur ni la chose vers laquelle il pointe.
const * unsigned char const buffer
signifie que vous ne pouvez pas modifier le pointeur buffer
ni la mémoire vers laquelle buffer
pointe.
Dans une déclaration comme const * const T
, la première const
(avant le *
) signifie que ce que les points de pointeur à est-const
(à savoir qu'il est un pointeur vers un const T
). Le const
après le *
signifie que le pointeur se est const
(ce ne peut pas être modifié pour pointer à quoi que ce soit d'autre).
Quelques articles pour vous aider à comprendre la correction const en C++:
En supposant const non signé char * const
Tout le monde a raison de dire que c'est un pointeur const vers un caractère const non signé.
Les types C++ lisent généralement de droite à gauche à moins qu'il n'y ait des modificateurs à l'extrême gauche, puis ceux-ci sont lus de gauche à droite.
déclarations de type doivent (?) Lire RTL. const
modifie la chose à sa gauche, mais la règle est compliquée par le fait que vous pouvez écrire à la fois const T
et T const
(ils signifient la même chose).
T * const
est un pointeur constant à mutable TT & const
serait référence constante à mutable T, à l'exception des références sont constants par définitionT const *
est un pointeur mutable à TT const &
est une référence à la constante TT const * const
est constante pointeur à T constanteMerci, le conseil de lecture RTL est utile pour de tels cas. – SyBer
Il devrait être 'const unsigned char * const' – wich
IIRC unsigned char const * const est également valable –
Non, vous ne voyez pas ces déclarations "souvent". La déclaration est, en fait, invalide et n'a donc aucun sens. S'il vous plaît, soyez plus prudent lorsque vous postez du code avec vos questions. – AnT