Udostępnij za pośrednictwem


Argumenty funkcji typu odwołania

Często jest bardziej efektywne, aby przekazać odwołania, zamiast dużych obiektów do funkcji.Pozwala to, aby kompilator przekazał adres obiektu przy zachowaniu składni, która będzie używana do uzyskania dostępu do obiektu.Rozważmy następujący przykład, w którym użyto struktury Date:

// 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()
{
}

Poprzedni kod pokazuje, że dostęp do elementów członkowskich struktury przekazanej przez odwołanie, uzyskiwany jest za pomocą operatora wyboru elementu członkowskiego (.), zamiast operatora wskaźnika wyboru elementu członkowskiego (–>).

Mimo że argumenty przekazywane jako typy odwołań widzą składnię typów nie wskaźnikowych, zachowują one jedną ważną cechę typów wskaźnikowych: są modyfikowalne, chyba że zostały zadeklarowane jako const.Ponieważ zamiarem poprzedniego kodu nie jest zmodyfikowanie obiektu GDate, bardziej odpowiednim prototypem funkcji jest:

long JulianFromGregorian( const Date& GDate );

Ten prototyp gwarantuje, że funkcja JulianFromGregorian nie zmieni swojego argumentu.

Dowolna funkcja prototypowana jako przyjmująca typ odwołania, może przyjąć obiekt tego samego typu w jej miejsce, ponieważ istnieje standardowa konwersja z typename na typename**&**.

Zobacz też

Informacje

Odwołania (C++)