Condividi tramite


Argomenti della funzione del tipo di riferimento

È spesso più efficiente passare i riferimenti, anziché oggetti di grandi dimensioni, funzioni.In tal modo il compilatore passi l'indirizzo dell'oggetto conservando la sintassi che è stata utilizzata per accedere all'oggetto.Si consideri l'esempio seguente che utilizza Date struttura:

// reference_type_function_arguments.cpp
struct Date
{
short DayOfWeek;
short Month;
short Day;
short Year;
};

// Create a Julian date of the form DDDYYYY
// from a Gregorian date.
long JulianFromGregorian( Date& GDate )
{
static int cDaysInMonth[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
   };
long JDate = 0;
// Add in days for months already elapsed.
for ( int i = 0; i < GDate.Month - 1; ++i )
JDate += cDaysInMonth[i];
// Add in days for this month.
JDate += GDate.Day;

// Check for leap year.
if ( GDate.Year % 100 != 0 && GDate.Year % 4 == 0 )
JDate++;
// Add in year.
JDate *= 10000;
JDate += GDate.Year;

return JDate;
}

int main()
{
}

Il codice precedente indica che i membri di una struttura passata per riferimento si accede utilizzando l'operatore di selezione dei membri (.) anziché l'operatore di selezione dei membri del puntatore (- >).

Sebbene gli argomenti passati come tipi di riferimento osservino la sintassi dei tipi non di puntatore, mantengono una caratteristica importante dei tipi di puntatore: sono modificabili a meno che non siano dichiarati come const.Poiché lo scopo del codice precedente non è possibile modificare l'oggetto GDate, un più appropriato prototipo di funzione è:

long JulianFromGregorian( const Date& GDate );

Il prototipo garantisce che la funzione JulianFromGregorian non modifica il relativo argomento.

Qualsiasi funzionano prototipo come creare un tipo di riferimento può accettare un oggetto dello stesso tipo nella posizione perché c'è una conversione standard da typename in typename&.

Vedere anche

Riferimenti

Riferimenti (C++)