Argumenty funkcji typ odwołania
Często jest bardziej skutecznego przekazania odwołań zamiast dużych obiektów do funkcji.Pozwala to kompilator przekazywać adres obiektu przy zachowaniu składni, który będzie używany do dostępu do obiektu.Rozważmy następujący przykład, który korzysta z Date struktury:
// 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()
{
}
Powyższy kod pokazuje elementy struktury, przekazywane przez odwołanie są dostępne, za pomocą operatora wybranych elementów członkowskich (.) zamiast operatora wskaźnik wyboru elementów członkowskich (->).
Mimo, że argumenty przekazywane jako typy odwołań obserwować Składnia typu non wskaźnik, zachowują jedną ważną cechą wskaźnik typów: są modyfikowane, o ile nie jest zadeklarowany jako const.Ponieważ zamiarów powyższy kod nie jest zmodyfikowanie obiektu GDate, jest bardziej odpowiedni prototyp funkcji:
long JulianFromGregorian( const Date& GDate );
Prototyp tego gwarantuje, że funkcja JulianFromGregorian nie zmieni się z jej argumentów.
Wszelkich funkcji jako biorąc typem odwołania może akceptować obiekt tego samego typu, w jego miejsce, ponieważ standardową konwersją z typename do typename**&**.