Freigeben über


Verweistyp-Funktionsargumente

Häufig ist es effizienter, Verweise zu übergeben, anstatt große Objekte, Funktionen.Dies ermöglicht es dem Compiler, um die Adresse des Objekts beim Beibehalten der Syntax zu übergeben, die verwendet werden, um auf das Objekt zuzugreifen.Betrachten Sie das folgende Beispiel, in dem die Date Struktur verwendet werden:

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

Dieser Code zeigt, dass Member einer Struktur, die als Verweis übergeben wird, mithilfe des Operators Auswahl Member (.) anstelle des Zeigers Member Auswahl**– >**Operators () zugegriffen werden.

Obwohl die Verweistypen, die als Argumente übergeben werden, die Syntax von Typen Zeiger nicht überwacht, behalten sie ein wichtiges Merkmal von Zeigertypen: Sie sind änderbar, es sei denn, constals deklariert.Da die Absicht des vorangehenden Codes nicht GDatedes Objekts zu ändern ist, ist ein entsprechenderer Funktionsprototyp:

long JulianFromGregorian( const Date& GDate );

Der Prototyp wird sichergestellt, dass die Funktion JulianFromGregorian nicht mit dem Argument ändert.

Alle Prototyp arbeiten, während das Erstellen eines Verweistyps ein Objekt des gleichen Typs in ihren Platz annehmen kann, da es sich um eine Standardkonvertierung von Typnamen zu Typnamen*&***vorhanden ist.

Siehe auch

Referenz

Verweise (C++)