Freigeben über


Verweistyp-Funktionsrückgaben

Funktionen können deklariert werden, um einen Verweistyp zurückzugeben. Es gibt zwei Gründe, eine solche Deklaration vorzunehmen:

  • Bei der zurückgegebenen Information handelt es sich um ein ausreichend großes Objekt, so dass die Rückgabe eines Verweises effizienter ist als die Rückgabe einer Kopie.

  • Der Typ der Funktion muss ein l-Wert sein.

Es kann genauso effizienter sein, große Objekte an Funktionen als Verweis zu übergeben wie es effizienter sein kann, große Objekte von Funktionen als Verweis zurückzugeben. Durch das Verweisrückgabeprotokoll entfällt die Notwendigkeit, das Objekt vor der Rückgabe in einen temporären Speicherort zu kopieren.

Verweisrückgabetypen können auch nützlich sein, wenn die Funktion als l-Wert ausgewertet werden muss. Die meisten überladenen Operatoren fallen in diese Kategorie, vor allem der Zuweisungsoperator. Überladene Operatoren werden in Überladene Operatoren behandelt.

Beispiel

Betrachten Sie das Point-Beispiel:

// refType_function_returns.cpp
// compile with: /EHsc

#include <iostream>
using namespace std;

class Point
{
public:
// Define "accessor" functions as
//  reference types.
unsigned& x();
unsigned& y();
private:
unsigned obj_x;
unsigned obj_y;
};

unsigned& Point :: x()
{
return obj_x;
}
unsigned& Point :: y()
{
return obj_y;
}

int main()
{
Point ThePoint;
// Use x() and y() as l-values.
ThePoint.x() = 7;
ThePoint.y() = 9;

// Use x() and y() as r-values.
cout << "x = " << ThePoint.x() << "\n"
<< "y = " << ThePoint.y() << "\n";
}

Ausgabe

x = 7
y = 9

Beachten Sie, dass die Funktionen x und y als zurückgebende Verweistypen deklariert werden. Diese Funktionen können auf beiden Seiten einer Zuweisungsanweisung verwendet werden.

Deklarationen von Verweistypen müssen Initialisierer enthalten, ausgenommen in den folgenden Fällen:

  • Explizite extern-Deklaration

  • Deklaration eines Klassenmembers

  • Deklaration innerhalb einer Klasse

  • Deklaration eines Arguments für eine Funktion oder der Rückgabetyp für eine Funktion

Siehe auch

Referenz

Verweise (C++)