Restituzione di valori per riferimento in C ++
Un programma C ++ può essere reso più facile da leggere e mantenere utilizzando riferimenti piuttosto che puntatori. Una funzione C ++ può restituire un riferimento in modo simile in quanto restituisce un puntatore.
Quando una funzione restituisce un riferimento, restituisce un puntatore implicito al valore restituito. In questo modo, una funzione può essere utilizzata sul lato sinistro di un'istruzione di assegnazione. Ad esempio, considera questo semplice programma:
#include <iostream>
#include <ctime>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues( int i ) {
return vals[i]; // return a reference to the ith element
}
// main function to call above defined function.
int main () {
cout << "Value before change" << endl;
for ( int i = 0; i < 5; i++ ) {
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // change 2nd element
setValues(3) = 70.8; // change 4th element
cout << "Value after change" << endl;
for ( int i = 0; i < 5; i++ ) {
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return 0;
}
Quando il codice precedente viene compilato insieme ed eseguito, produce il seguente risultato:
Value before change
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
Value after change
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50
Quando si restituisce un riferimento, fare attenzione che l'oggetto a cui si fa riferimento non esca dall'ambito. Quindi non è legale restituire un riferimento alla var locale. Ma puoi sempre restituire un riferimento su una variabile statica.
int& func() {
int q;
//! return q; // Compile time error
static int x;
return x; // Safe, x lives outside this scope
}