10 votes

Pourquoi ne pouvons-nous pas utiliser des membres const dans des fonctions membres statiques ?

class TConst
{
    const int i;
    int& ref;
    public:
    TConst(int n):i(n),ref(n){}
    static void p1(){prn(i);}//erreur ici
};

Mon compilateur génère une erreur lorsque j'essaie d'utiliser un membre de classe const dans une fonction membre static.

Pourquoi n'est-ce pas autorisé?

14voto

tenfour Points 16759

const signifie des choses différentes. Dans ce cas, cela signifie que i est immuable après avoir été initialisé. Cela ne signifie pas que c'est une constante littérale (comme je crois que vous pensez que cela signifie). i peut être différent pour différentes instances de TConst, il est donc logique que les méthodes static ne puissent pas l'utiliser.

7voto

Igor Oks Points 9737

Ça ne marcherait pas même si ce n'était pas const :

erreur : une référence de membre non statique doit être relative à un objet spécifique

Les fonctions statiques ne peuvent pas accéder aux variables de membre non statiques. Cela est dû au fait que les variables de membre non statiques doivent appartenir à un objet de classe, et les fonctions membres statiques n'ont pas d'objet de classe avec lequel travailler.

6voto

Karlson Points 2645

Le membre const est initialisé lors de la construction de l'objet. Les membres static ne dépendent pas de la création de l'objet et n'ont pas accès au pointeur this donc ils ne savent pas où réside votre variable de membre const.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X