2010-11-15 16 views
5

Je m'excuse si cela a déjà été demandé. Mes résultats de recherche n'ont pas révélé une question similaire.Méthode Const accédant aux variables statiques

Ceci est une question conceptuelle. Selon MSDN et d'autres:

Une fonction membre constante ne peut pas modifier les données membres ou appeler toutes les fonctions membres qui ne sont pas constantes

Pourquoi alors nous a permis d'accéder à des variables membres statiques de une méthode const?

+0

Si vous lisez seulement les variables membres alors vous ne les changez pas et ne violez pas l'exigence const juste? – Jay

+0

@Jay Je peux le changer aussi, pas seulement le lire – Samaursa

Répondre

9

La norme C++ dit ceci au sujet const fonctions membres:

Si la fonction de membre est déclaré const, le type de c'est const X*, [...]

En fonction de membre const, l'objet pour lequel la fonction est appelée est accessible via un chemin d'accès const; par conséquent, une fonction membre const ne doit pas modifier l'objet et ses membres de données non statiques.

Ainsi, vous voyez que seuls les membres de données non statiques font partie de la 'constness' de la fonction membre.

Cependant, je pense que plus important encore, il indique qu'une bonne façon de comprendre ce qui se passe avec const fonctions membres est qu'il rend le pointeur this implicite un pointeur vers const.

Étant donné que les membres statiques n'ont pas besoin d'être accessibles via le pointeur this (implicitement ou explicitement), l'accès à ceux-ci n'est pas qualifié const.

+1

Merci beaucoup pour votre réponse. Après réflexion, j'ai décidé de vérifier la vôtre comme la réponse correcte car elle explique plus en détail sans laisser aucun doute, en particulier la partie: _ ".. un bon moyen de comprendre ce qui se passe ..." _ – Samaursa

13

Parce qu'ils ne font pas partie de l'objet.

+1

simple mais trop le point! – thecoshman