Argumentos de tipo de referência de função

Geralmente é mais eficiente para passar referências, em vez de objetos grandes, para funções.Isso permite que o compilador passar o endereço do objeto, mantendo a sintaxe que seria usada para acessar o objeto.Considere o seguinte exemplo que usa o Date estrutura:

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

O código anterior mostra que os membros de uma estrutura passados por referência são acessados usando o operador de seleção de membro (.) em vez do operador de seleção de membro de ponteiro (– >).

Embora os argumentos passados como tipos de referência observar a sintaxe dos tipos de ponteiro-não, eles mantêm uma característica importante dos tipos de ponteiro: eles são modificáveis, a menos que declarado como const.Porque a intenção do código anterior é não modificar o objeto GDate, um protótipo de função mais apropriado é:

long JulianFromGregorian( const Date& GDate );

Este protótipo garante que a função JulianFromGregorian não mudará seu argumento.

Qualquer função como protótipo levando a um tipo de referência pode aceitar um objeto do mesmo tipo em seu lugar, porque há uma conversão padrão de typename para typenamee.

Consulte também

Referência

Referências (C++)