Heim > Backend-Entwicklung > C++ > Wie bestimmt die Ableitung von C-Vorlagenargumenten die Array-Größen in Funktionsvorlagen?

Wie bestimmt die Ableitung von C-Vorlagenargumenten die Array-Größen in Funktionsvorlagen?

Mary-Kate Olsen
Freigeben: 2024-11-30 15:22:12
Original
644 Leute haben es durchsucht

How Does C   Template Argument Deduction Determine Array Sizes in Function Templates?

Grundlegendes zum Abzug von Vorlagenargumenten in Funktionsvorlagen

Betrachten Sie den folgenden Code, in dem eine Funktionsvorlage cal_size zum Berechnen und Drucken der Größe von Arrays verwendet wird :

#include <iostream>

template <typename T, size_t N>
void cal_size(T (&amp;a)[N])
{
    std::cout << "size of array is: " << N << std::endl;
}
Nach dem Login kopieren

Wenn das Programm ausgeführt wird, druckt es für beide die richtige Größe Arrays:

int a[] = {1,2,3,4,5,6};
int b[] = {1};

cal_size(a);
cal_size(b);
Nach dem Login kopieren

Wie leitet die Vorlagenfunktion cal_size also automatisch die Größe der übergebenen Arrays ab, auch wenn die Größe nicht explizit als Argument übergeben wird?

Die Antwort liegt in das Konzept der Template-Argument-Ableitung in C. So funktioniert es:

Während der Kompilierung führt der Compiler eine Vorlagenargumentableitung durch, um den Typ von T und den Wert von N basierend auf dem tatsächlichen Typ des an die Vorlagenfunktion übergebenen Arguments zu bestimmen. Wenn in diesem Fall cal_size mit dem Argument a aufgerufen wird, leitet der Compiler T als int und N als 6 ab und erstellt zur Kompilierungszeit eine spezialisierte Funktion cal_size_int_6:

void cal_size_int_6(int (&amp;a)[6])
{
    std::cout << "size of array is: " << 6 << std::endl;
}
Nach dem Login kopieren

Ähnlich gilt für das Argument b die Der Compiler leitet T als int und N als 1 ab, was zur Spezialisierung führt cal_size_int_1:

void cal_size_int_1(int (&amp;a)[1])
{
    std::cout << "size of array is: " << 1 << std::endl;
}
Nach dem Login kopieren

Daher erstellt die ursprüngliche cal_size-Vorlage effektiv zwei separate Funktionsspezialisierungen, jede mit ihren eigenen fest codierten T- und N-Werten. Dieser Prozess stellt sicher, dass bei jedem Aufruf von cal_size.

die richtige Array-Größe gedruckt wird

Das obige ist der detaillierte Inhalt vonWie bestimmt die Ableitung von C-Vorlagenargumenten die Array-Größen in Funktionsvorlagen?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage