2010-11-15 12 views
5

Ich entschuldige mich, wenn dies zuvor gefragt wurde. Meine Suchergebnisse ergaben keine ähnliche Frage.Const-Methode Zugriff auf statische Variablen

Dies ist eine konzeptionelle Frage. Nach MSDN und andere als gut:

Eine konstante Elementfunktion alle Datenelemente nicht ändern können oder alle Member-Funktionen aufrufen, die nicht konstant sind

Warum dann dürfen wir aus statischen Membervariablen für den Zugriff auf eine konstante Methode?

+0

Wenn Sie nur die Elementvariablen lesen, dann ändern Sie sie nicht und verletzen nicht das const-Anforderungsrecht? – Jay

+0

@Jay Ich kann es auch ändern, nicht nur lesen – Samaursa

Antwort

9

Der Standard C++ sagt über const Member-Funktionen:

Wenn die Memberfunktion const deklariert wird, der Typ dieser const X* ist, [...]

In einer const Memberfunktion, Auf das Objekt, für das die Funktion aufgerufen wird, wird über einen const Zugriffspfad zugegriffen; Daher darf eine const Elementfunktion das Objekt und seine nicht statischen Datenelemente nicht ändern.

Sie sehen also, dass nur nicht statische Datenelemente Teil der 'constness' der Elementfunktion sind.

Aber ich denke, dass noch wichtiger bedeutet dies, dass ein guter Weg, um zu verstehen, was mit const Mitgliederfunktionen auf geht ist, dass es die impliziten this Zeiger ein Zeiger auf const macht.

Da auf statische Elemente nicht über den Zeiger this (implizit oder explizit) zugegriffen werden muss, ist der Zugriff auf sie nicht const qualifiziert.

+1

Vielen Dank für Ihre Antwort. Nach einigem Nachdenken habe ich mich entschieden, deine als die richtige Antwort zu prüfen, wie es ausführlicher erklärt, ohne irgendwelche Zweifel zu hinterlassen, besonders den Teil: _ ".. ein guter Weg zu verstehen, was los ist ..." _ – Samaursa

13

Weil sie nicht Teil des Objekts sind.

+1

einfach, aber auch der Punkt! – thecoshman