Поделиться через


Аргументы функции ссылочного типа

Это часто эффективно передавать ссылки, а не больших объектов, к функциям.Это позволяет компилятору передавать адрес объекта при сохранении синтаксис, который будет использоваться для доступа к объекту.Рассмотрим следующий пример, в котором используется 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()
{
}

Предыдущий Код указывает, что члены структуры, передаваемое по ссылке осуществляется с помощью оператора (участник-выделения**.вместо оператора участник-выделения указателя ()- >**).

Хотя аргументы, передаваемые как ссылочные типы наблюдают синтаксисом типов non-указателя, сохраняют важной характеристикой одна типов указателя. изменяемые если они объявлены как Const.Поскольку цель приведенного выше Кода не является изменения объекта GDateболее подходящий прототип функции:

long JulianFromGregorian( const Date& GDate );

Этот прототип гарантирует, что функция JulianFromGregorian не изменяет его аргумент.

Любые функции prototyped по мере создания ссылочный тип может принять объект того же типа в его место, поскольку стандартное преобразование TypeName В TypeName&.

См. также

Ссылки

Ссылки (C++)