Verweistyp-Funktionsargumente
Häufig ist es effizienter, Verweise anstelle großer Objekte an Funktionen zu übergeben. Dies ermöglicht es dem Compiler, die Adresse des Objekts zu übergeben, während die Syntax beibehalten wird, die verwendet worden wäre, um auf das Objekt zuzugreifen. Betrachten Sie das folgende Beispiel, in dem die Date
-Struktur verwendet wird:
// reference_type_function_arguments.cpp
#include <iostream>
struct Date
{
short Month;
short Day;
short Year;
};
// Create a date of the form DDDYYYY (day of year, year)
// from a Date.
long DateOfYear( Date& date )
{
static int cDaysInMonth[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
long dateOfYear = 0;
// Add in days for months already elapsed.
for ( int i = 0; i < date.Month - 1; ++i )
dateOfYear += cDaysInMonth[i];
// Add in days for this month.
dateOfYear += date.Day;
// Check for leap year.
if ( date.Month > 2 &&
(( date.Year % 100 != 0 || date.Year % 400 == 0 ) &&
date.Year % 4 == 0 ))
dateOfYear++;
// Add in year.
dateOfYear *= 10000;
dateOfYear += date.Year;
return dateOfYear;
}
int main()
{
Date date{ 8, 27, 2018 };
long dateOfYear = DateOfYear(date);
std::cout << dateOfYear << std::endl;
}
Der vorangehende Code zeigt, dass elemente einer struktur, die per Verweis übergeben wird, mithilfe des Memberauswahloperators (.) anstelle des Zeigerelementauswahloperators (->) aufgerufen werden.
Obwohl als Referenztypen übergebene Argumente die Syntax von Nicht-Zeigertypen beobachten, behalten sie ein wichtiges Merkmal von Zeigertypen bei: Sie sind modifizierbar, es sei denn, sie werden als const
deklariert. Da die Absicht des vorangehenden Codes nicht in der Änderung des date
-Objekts liegt, ist ein geeigneterer Funktionsprototyp:
long DateOfYear( const Date& date );
Der Prototyp garantiert, dass die Funktion DateOfYear
das Argument nicht ändert.
Jede Funktion, die als Bezugstyp erstellt wurde, kann ein Objekt desselben Typs an seiner Stelle akzeptieren, da es eine Standardkonvertierung von Typname in Typname&n gibt.
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für