Heim > Backend-Entwicklung > C++ > Wie bestimmt eine C-Vorlagenfunktion die Größe eines Arrays?

Wie bestimmt eine C-Vorlagenfunktion die Größe eines Arrays?

DDD
Freigeben: 2024-12-05 17:31:11
Original
675 Leute haben es durchsucht

How Does a C   Template Function Determine the Size of an Array?

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);
Nach dem Login kopieren

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(&amp;)[Size]) { return size; }
Nach dem Login kopieren

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&amp; sizeof_array_helper(T(&amp;)[Size]);

#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))
Nach dem Login kopieren

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!
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage