Condividi tramite


Funzioni che restituiscono tipi di riferimento

È possibile dichiarare le funzioni affinché restituiscano un tipo di riferimento. La dichiarazione di una funzione viene effettuata per due motivi:

  • Le informazioni da restituire sono un oggetto di dimensioni abbastanza grandi da far sì che la restituzione di un riferimento risulti più efficiente rispetto alla restituzione di una copia.

  • Il tipo di funzione deve essere un l-value.

Come può essere più efficiente passare oggetti di grandi dimensioni alle funzioni per riferimento, può essere più efficiente anche restituire oggetti di grandi dimensioni dalle funzioni con questo metodo. Il protocollo riferimento-restituzione elimina la necessità di copiare l'oggetto in un percorso temporaneo prima della restituzione.

I tipi riferimento-restituzione possono rivelarsi utili quando la funzione deve restituire un l-value. La maggior parte degli operatori di overload rientra in questa categoria, in particolare l'operatore di assegnazione. Gli operatori di overload sono illustrati in Operatori di overload.

Esempio

Considerare l'esempio 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";
}

Output

x = 7
y = 9

Tenere presente che le funzioni x e y vengono dichiarate come elementi che restituiscono tipi di riferimenti. Tali funzioni possono essere utilizzate su entrambi i lati di un'istruzione di assegnazione.

Le dichiarazioni di tipi di riferimenti devono contenere gli inizializzatori tranne nei seguenti casi:

  • Dichiarazione extern esplicita

  • Dichiarazione di un membro di classe

  • Dichiarazione all'interno di una classe

  • Dichiarazione di un argomento in una funzione o del tipo restituito da una funzione

Vedere anche

Riferimenti

Riferimenti (C++)