Verweise (C++)
Ein Verweis, z. B. ein Zeiger ist, speichert die Adresse eines Objekts, das sich an anderer Stelle im Speicher befindet. Im Gegensatz zu einem Zeiger kann sich ein Verweis nach der Initialisierung nicht auf ein anderes Objekt beziehen oder auf null gesetzt werden. Es gibt zwei Arten von Verweisen: lvalue-Verweise, die sich auf benannte Variable beziehen, und rvalue-Verweise, die sich auf ein temporäres Objekt beziehen. Der &
-Operator gibt einen lvalue-Verweis und der &&
-Operator einen rvalue-Verweis oder einen universellen Verweis (rvalue oder lvalue) an, je nach Kontext.
Verweise können mit der folgenden Syntax deklariert werden:
[Speicherklassenspezifizierer] [CV-Qualifizierer] Typspezifizierer [MS-Modifizierer] Deklarator [
=
Ausdruck];
Jeder gültige Deklarator, der einen Verweis angibt, kann verwendet werden. Sofern der Verweis kein Verweis auf den Funktions- oder Arraytyp ist, gilt die folgende vereinfachte Syntax:
[Speicherklassenspezifizierer] [CV-Qualifizierer] Typspezifizierer [
&
oder&&
] [CV-Qualifizierer] Bezeichner [=
Ausdruck];
Verweise werden unter Verwendung dieser Reihenfolge deklariert:
Die Deklarationsspezifizierer:
- Ein optionaler Speicherklassenbezeichner.
- Optionale
const
- und/odervolatile
-Qualifizierer - Der Typspezifizierer: der Name eines Typs
Der Deklarator:
Ein optionaler Microsoft-spezifischer Modifizierer. Weitere Informationen finden Sie unter Microsoft-spezifische Modifizierer.
Der
&
-Operator oder&&
-OperatorOptionale
const
- und/odervolatile
-QualifiziererDer -Bezeichner.
Ein optionaler Initialisierer.
Die komplexeren Deklaratorformen für Zeiger auf Arrays und Funktionen gelten auch für Verweise auf Arrays und Funktionen. Weitere Informationen finden Sie unter Zeiger.
Mehrere Deklaratoren und Initialisierer erscheinen möglicherweise in einer durch Trennzeichen getrennten Liste, die einem einzelnen Deklarationsspezifizierer folgt. Zum Beispiel:
int &i;
int &i, &j;
Verweise, Zeiger und Objekte können zusammen deklariert werden:
int &ref, *ptr, k;
Ein Verweis enthält die Adresse eines Objekts, verhält sich aber syntaktisch wie ein Objekt.
Beachten Sie im folgenden Programm, dass der Name des Objekts s
und der Verweis auf das Objekt SRef
in Programmen identisch verwendet werden kann:
Beispiel
// references.cpp
#include <stdio.h>
struct S {
short i;
};
int main() {
S s; // Declare the object.
S& SRef = s; // Declare and initialize the reference.
s.i = 3;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
SRef.i = 4;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
}
3
3
4
4
Siehe auch
Verweistyp-Funktionsargumente
Verweistyp-Funktionsrückgaben
Verweise auf Zeiger
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für