next up previous contents
Next: Constantes et références Up: Les constantes en C++ Previous: De vraies constantes ...

Modifier une constante

Le cast permet de transformer une constante en non constante mais avec parfois des risques d'incohérence...:

                                // bizarre, bizarre
#include <iostream.h>

main(){
  const int i=0;            
  const int *pci=&i;            // ok
  (*(int *)pci)=1;              // ok grace au cast
  cout<<"i="<<i<<"\t &i="<<((int)&i)<<endl
    <<"*pci="<<*pci<<"\t pci="<<((int)pci)<<endl;
                                // pci==&i
                                // mais i=0 et *pci=1 !!
  cout<<"*&i="<<(*&i)<<endl;    // et *&i!=i !!
}
donne le résultat:
i=0      &i=2063807312
*pci=1   pci=2063807312
*&i=1

D'après le manuel de référence, un objet (d'une classe sans constructeur ni destructeur, ce qui est le cas des types de bases) const peut être stocké dans une zone ``read-only'', et la modification d'une constante peut donc provoquer des erreurs à l'exécution



Mon Oct 20 14:02:48 MET 1997