Typ des this-Zeigers
Der Typ des this-Zeigers kann in der Funktionsdeklaration durch die const- und volatile-Schlüsselwörter geändert werden. Um eine Funktion so zu deklarieren, dass sie die Attribute von mindestens einem dieser Schlüsselwörter hat, fügen Sie die Schlüsselwörter nach der Funktionsargumentliste hinzu.
Betrachten Sie das folgende Beispiel:
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Der vorangehende Code deklariert eine Memberfunktion, X, in der der this-Zeiger als const-Zeiger auf ein const-Objekt behandelt wird. Kombinationen von cv-mod-list-Optionen können verwendet werden, sie ändern jedoch immer das Objekt, auf das von this gezeigt wird, nicht den this-Zeiger selbst. Daher deklariert die folgende Deklaration die Funktion X; der this-Zeiger ist ein const-Zeiger auf ein const-Objekt:
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Der Typ von this in einer Memberfunktion wird durch die folgende Syntax beschrieben, wobei cv-qualifier-list vom Memberfunktionsdeklarator bestimmt wird und const oder volatile (oder beide) sein kann, und class-type ist der Name der Klasse:
[cv-qualifier-list] class-type * const this
Das heißt, this ist immer ein konstanter Zeiger, er kann nicht erneut zugeordnet werden. Die const- oder volatile-Qualifizierer, die in der Memberfunktionsdeklaration verwendet werden, gelten für die Klasseninstanz, auf die von this im Rahmen dieser Funktion verwiesen wird.
In der folgenden Tabelle wird näher erläutert, wie diese Modifizierer funktionieren.
Semantik dieser Modifizierer
Modifizierer |
Bedeutung |
---|---|
const |
Kann Memberdaten nicht ändern; kann Memberfunktionen, nicht const sind, nicht aufrufen. |
volatile |
Memberdaten werden vom Arbeitsspeicher geladen, wenn darauf zugegriffen wird; deaktiviert bestimmte Optimierungen. |
Es ist nicht zulässig, ein const-Objekt an eine Memberfunktion zu übergeben, die nicht const ist. Außerdem ist es nicht zulässig, ein volatile-Objekt an eine Memberfunktion zu übergeben, die nicht volatile ist.
Memberfunktionen, die als const deklariert sind, können Memberdaten nicht ändern – in solchen Funktionen ist der this Zeiger ein Zeiger auf ein const-Objekt.
Hinweis
Konstruktoren und Destruktoren können nicht als const oder volatile deklariert werden.Sie können jedoch auf const- oder volatile-Objekten aufgerufen werden.