Im ayant du mal à comprendre le sens de const int* const &alias_for_ptr = ptr;
en ce qui concerne les éléments suivants:Problème avec: 'const int * const & alias_for_ptr = ptr;', pourquoi les deux identifiants ont-ils des valeurs différentes?
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* ptr = &a;
const int* const &alias_for_ptr = ptr;
ptr = NULL; //or ptr = 0;
if (ptr == alias_for_ptr)
//This should execute but doesn't
cout << "ptr == alias_for_ptr" << endl;
else
//This should NOT execute but DOES
cout << "ptr != alias_for_ptr" << endl;
return 0;
}
Pourquoi est-ce que ptr == alias_for_ptr
renvoie false, (en fait alias_for_ptr
conserve sa vieille valeur de &a
)? J'avais l'impression que alias_for_ptr
aura toujours la même valeur que ptr
(bien que l'utilisation du symbole &) et que const int* const X = Y
assure seulement que je ne peux pas changer à la fois la valeur de X
et la valeur pointée par X
par cet identifiant X
.
Aussi si je supprime le deuxième const
puis le script ne compilera pas, ce qui me confond plus tard. Notez que l'erreur de compilation est: invalid initialization of reference of type ‘const int*&’ from expression of type ‘int*’
.
Je pense que c'est votre droit. Im en utilisant g ++, si je supprime le premier const, alors cela fonctionne comme prévu, aussi si j'ajoute un const à la ligne ci-dessus donc son 'const int * ptr = & a;' alors cela fonctionne aussi. Y at-il un moyen de faire sans ajouter/enlever ces deux consts? J'ai essayé d'utiliser l'opérateur 'const_cast' mais sans succès. Prehaps c'est un bug avec g ++. – tmoschou