Share via


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:

  1. Die Deklarationsspezifizierer:

    • Ein optionaler Speicherklassenbezeichner.
    • Optionale const- und/oder volatile-Qualifizierer
    • Der Typspezifizierer: der Name eines Typs
  2. Der Deklarator:

    • Ein optionaler Microsoft-spezifischer Modifizierer. Weitere Informationen finden Sie unter Microsoft-spezifische Modifizierer.

    • Der &-Operator oder &&-Operator

    • Optionale const- und/oder volatile-Qualifizierer

    • Der -Bezeichner.

  3. 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