Question

Je suis un peu confus pour expliquer pourquoi cette compile et exécute le code:

class A
{
private:
    int* b;
public:
    A() : b((int*)0xffffffff) {}
    int* get_b() const {return this->b;}
};

int main()
{
    A a;
    int *b = a.get_b();
    cout<<std::hex<<b<<endl;
    return 0;
}

Sortie de l'exécution de ce code est bien FFFFFFFFas ... inattendu par moi. Ne devrait pas this->b retour const int* car il est dans une fonction membre const? et par conséquent la ligne return devrait générer une erreur compilateur-cast pour essayer de fonte const int* à int*

De toute évidence il y a une lacune dans ma connaissance de ce const fonctions membres signifient. Je vous en serais reconnaissant si quelqu'un pouvait me aider à combler cette lacune.

Était-ce utile?

La solution

Non, l'élément est un int* const (comme on le voit à partir de la fonction de const), ce qui est totalement différent.

Le pointeur est const, pas l'objet pointé.

Autres conseils

La partie const d'une fonction de membre dit juste que la fonction est autorisée à appeler lorsque le pointeur de la this (alias l'objet sur lequel il est appelé) est const. Il n'a rien à voir avec la valeur de retour.

class A{
public:
  void non_const_func(){}
  void const_func() const {}
};

int main(){
  A a;
  a.const_func(); // works
  a.non_const_func(); // works too

  const A c_a;
  c_a.const_func(); // works again
  c_a.non_const_func(); // EEEK! Error, object is const but function isn't!

}

La fonction renvoie un pointeur entier par valeur -. Vous ne pouvez pas changer le membre de la classe est une copie via cette valeur, donc il n'y a pas eu violation de const

Mettre const après la déclaration de fonction que vous avez dit au compilateur « Hey, je promets de ne pas modfy *this! ». Votre méthode est tout simplement un accesseur.

Voir C ++ FAQ LITE 18,10

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top