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

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

Linda Hamilton
Linda HamiltonOriginal
2024-12-05 12:12:14909Durchsuche

How Does Template Argument Deduction Determine Array Sizes in C  ?

Wie die Template-Argument-Ableitung Array-Größen aufdeckt

Im bereitgestellten C-Code gibt die Template-Funktion cal_size die Größe eines Array-Referenzarguments aus. Es ist faszinierend, wie der Vorlagenparameter N automatisch die Länge des übergebenen Arrays widerspiegelt.

Abzug von Vorlagenargumenten

N ist keine initialisierte Variable; Es ist eine Konstante zur Kompilierungszeit. Durch einen als Vorlagenargumentabzug bekannten Prozess werden sowohl T als auch N aus dem an die Vorlagenfunktion übergebenen Argument abgeleitet.

Betrachten Sie die folgenden Aufrufe von cal_size:

  • Für das a-Array (Länge 6): Der Compiler leitet T als int und N als 6 ab. Er generiert ein spezialisiertes Funktion:
void cal_size_int_6(int (&a)[6]) {
  std::cout << "size of array is: " << 6 << std::endl;
}
  • Für das b-Array (Länge 1): Auch hier leitet der Compiler T als int und N als 1 ab und erzeugt so eine weitere spezialisierte Funktion:
void cal_size_int_1(int (&a)[1]) {
  std::cout << "size of array is: " << 1 << std::endl;
}

Separate Funktionsaufrufe

Im Wesentlichen wird die cal_size-Vorlage in einzelne spezialisierte Funktionen mit fester Codierung übersetzt Werte von N und T. Die Hauptfunktion wird äquivalent zu:

int main() {
  cal_size_int_6(a);
  cal_size_int_1(b);
}

Zusammenfassend ermöglicht die Vorlagenargumentableitung Vorlagen, die Arraygröße aus dem Argumenttyp abzuleiten. Der zugrunde liegende Mechanismus beinhaltet die Generierung spezialisierter Funktionen für jede einzigartige Kombination von Argumenttypen, jeder mit seinen eigenen statisch bestimmten N- und T-Werten.

Das obige ist der detaillierte Inhalt vonWie bestimmt die Ableitung von Vorlagenargumenten die Array-Größen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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