« Programmation C++/Les pointeurs » : différence entre les versions

Aller à la navigation Aller à la recherche
 
Exemple:
<source lang="cpp">
char* const msg="essai constant";
 
msg="Test"; // <- Interdit (erreur de compilation),
// ne peut pointer la chaîne "Test"
*msg = 'E'; // OK -> "Essai constant"
</source>
 
=== Pointeur constant vers une valeur constante ===
 
Exemple:
<source lang="cpp">
const char* const msg="essai constant";
 
msg="Test"; // <- Interdit (erreur de compilation),
// ne peut pointer la chaîne "Test"
 
*msg = 'E'; // <- Interdit, la valeur pointée ne peut être modifiée
</source>
 
=== Position du mot clé <code>const</code> ===
Une méthode simple existe pour déterminer si c'est la valeur pointée ou le pointeur lui-même qui est constant. Elle est apparue il y a plus de 10 ans et a été promue par Dan Sacks, sans succès malheureusement. Cette méthode se résume en une seule phrase :
Elle est apparue il y a plus de 10 ans et a été promue par Dan Sacks, sans succès malheureusement.
Cette méthode se résume en une seule phrase :
"<code>const</code> s'applique toujours à ce qui le précède".
Par conséquent, une déclaration ne commencera jamais par <code>const</code> qui ne serait précédé de rien et qui ne pourrait donc s'appliquer à rien. En effet, les deux déclarations suivantes sont strictement équivalentes en C++ :
En effet, les deux déclarations suivantes sont strictement équivalentes en C++ :
const char * msg; // déclaration habituelle
char const * msg; // déclaration Sacks
Cette méthode peut s'avérer précieuse dans le cas de déclarations plus complexes :
int const ** const *ptr; // ptr est un pointeur vers un pointeur constant de pointeur d'entier constant : *ptr et ***ptr ne peuvent être modifiés
Ce changement n'a jamais été intégré dans les compilateurs, qui continuent à reporter les types comme <code>const char *</code>. Cette idée brillante n'a aucun inconvénient et n'a jamais été contredite par personne faisant autorité en matière de C++. Mais elle n'a jamais été intégrée dans les outils et manuels, juste pour ne pas changer les habitudes.
Cette idée brillante n'a aucun inconvénient et n'a jamais été contredite par personne faisant autorité en matière de C++.
Mais elle n'a jamais été intégrée dans les outils et manuels, juste pour ne pas changer les habitudes.
 
[[Catégorie:Programmation C++ (livre)]]

Menu de navigation