Verstehen der Vorlagenfunktion „Größe des Arrays“
Dieser Code verwendet eine Vorlagenfunktion, um die Länge eines Arrays zu bestimmen, jedoch dessen Inneres Die Funktionsweise kann rätselhaft sein. Schauen wir uns genauer an, wie es diese Aufgabe erfüllt.
Parameter-Entmystifizierung
Der Funktionsparameter T(&)[Größe] könnte zunächst verwirrend erscheinen. Bei der Dekodierung von innen nach außen wird ein Verweis auf ein unbenanntes Array der Größe size mit Typ T angezeigt. Dies bedeutet, dass Verweise auf jedes Array akzeptiert werden, bei dem Typ und Größe des Arrays durch die Vorlagenparameter angegeben werden.
Vorlagenabzug in Aktion
Wenn die Funktion mit einem Array aufgerufen wird, wie zum Beispiel:
int a[10]; GetArrLength(a);
The Der Compiler versucht, die Vorlagenparameter abzuleiten. Um mit dem Parametertyp übereinzustimmen, muss T int sein und die Größe muss 10 sein (was zu einem Parameter führt, der auf ein Array mit 10 Ganzzahlen verweist). Die Funktion gibt dann die Größe zurück und stellt die Anzahl der Elemente im Array bereit.
Behebung potenzieller Probleme
Dieser Code weist zwei potenzielle Probleme auf. Erstens dürfen Größen nicht negativ sein, daher sollte kein vorzeichenbehafteter Typ für den Vorlagenparameter oder Rückgabetyp verwendet werden. Stattdessen sollte ein vorzeichenloser Typ verwendet werden, z. B. std::size_t:
template<typename T, std::size_t Size> std::size_t GetArrLength(T(&)[Size]) { return size; }
Zweitens ist das Ergebnis der Funktion trotz der konstanten Natur der Array-Größen kein konstanter Ausdruck. Für eine verbesserte Benutzerfreundlichkeit wird ein konstanter Ausdruck bevorzugt:
template <std::size_t N> struct type_of_size { typedef char type[N]; }; template <typename T, std::size_t Size> typename type_of_size<Size>::type& sizeof_array_helper(T(&)[Size]); #define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
Mit dieser Technik können Sie die Größe eines Arrays als konstanten Ausdruck abrufen:
int a[10]; const std::size_t n = sizeof_array(a); // constant-expression!
Das obige ist der detaillierte Inhalt vonWie bestimmt eine C-Vorlagenfunktion die Größe eines Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!