Udostępnij za pośrednictwem


Zwracanie funkcji typu odwołania

Funkcje mogą być zadeklarowane, aby zwracały typ odwołania.Istnieją dwa powody, aby robić takie deklaracje:

  • Informacje są zwracane w obiektach dużych na tyle, że zwracanie odwołania jest bardziej wydajne niż zwracanie kopii.

  • Typ funkcji musi być l-wartością.

Tak samo jak bardziej wydajne może być przekazywanie dużych obiektów do funkcji przez odwołanie, tak bardziej wydajne może być zwracanie dużych obiektów z funkcji przez odwołanie.Protokół zwracania odwołań eliminuje konieczność kopiowania obiektu do tymczasowej lokalizacji przed jego zwróceniem.

Typy zwracane przez odwołanie mogą być również przydatne, gdy funkcja musi być obliczana do l-wartości.Większość przeciążonych operatorów należy do tej kategorii, szczególnie operator przypisania.Przeciążone operatory zostały omówione w Przeciążone operatory.

Przykład

Rozważ przykład Point:

// 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";
}

Dane wyjściowe

x = 7
y = 9

Zauważ, że funkcje x i y zostały zadeklarowane jako zwracające typy odwołań.Funkcje te mogą zostać użyte po każdej stronie instrukcji przypisania.

Deklaracje typów odwołań muszą zawierać inicjatory, z wyjątkiem następujących przypadków:

  • Jawna deklaracja extern

  • Deklaracja elementu członkowskiego klasy

  • Deklaracja wewnątrz klasy

  • Deklaracja argumentu funkcji lub typu zwracanego funkcji

Zobacz też

Informacje

Odwołania (C++)