Partager via


Arguments de fonction de type référence

il est souvent plus efficace de passer des références, plutôt que de grands objets, aux fonctions.Cela permet au compilateur pour obtenir l'adresse de l'objet tout en maintenant la syntaxe qui aurait été utilisée pour accéder à l'objet.Prenons l'exemple suivant qui utilise la génération d' 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()
{
}

Le code précédent indique que les membres d'une structure passée par référence sont accessibles à l'aide de l'opérateur member-selection (.) au lieu de l'opérateur member-selection de pointeur (- >).

Bien que les arguments passés en tant que types référence observez la syntaxe des types de pointeur, elles augmentent une fonctionnalité importante des types pointeur : ils sont modifiables à moins que déclaré comme const.Étant donné que l'intention du code précédent n'est pas de modifier l'objet GDate, un prototype de fonction plus approprié est :

long JulianFromGregorian( const Date& GDate );

Ce prototype garantit que la fonction JulianFromGregorian ne modifie pas son argument.

Fonctionnent prototype comme prendre un type référence peut recevoir un objet du même type dans sa place parce qu'il existe une conversion standard typenameau typename*&***.

Voir aussi

Référence

Références (C++)