Heim >Backend-Entwicklung >C++ >Wie leitet C die Array-Größe in Funktionsvorlagen ab?

Wie leitet C die Array-Größe in Funktionsvorlagen ab?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 17:15:17836Durchsuche

How Does C   Deduce Array Size in Function Templates?

Abzug der Array-Größe in Funktionsvorlagen

Im bereitgestellten C-Code wird eine Funktionsvorlage namens cal_size deklariert, die ein Array als Argument akzeptiert. Die Funktionsvorlage leitet die Größe des Arrays aus dem Argumenttyp ab und gibt sie aus.

Es stellt sich die Frage: Wie wird der Vorlagenparameter N automatisch auf die richtige Größe des Arrays initialisiert, ohne ihn explizit in der Funktion anzugeben? Anruf?

Abzug von Vorlagenargumenten

Der Schlüssel zum Verständnis dieses Verhaltens liegt im Prozess des Abzugs von Vorlagenargumenten. Wenn eine Vorlagenfunktion aufgerufen wird, verwendet der Compiler den tatsächlichen Typ des Arguments, um die Werte der Vorlagenparameter abzuleiten.

Im Fall von cal_size ist der Argumenttyp ein Array von Elementen vom Typ T mit a angegebene Größe N. Der Compiler leitet T aus dem Elementtyp des Arrays und N aus der Größe des Arrays ab.

Wenn das Argument a an die Funktion übergeben wird, leitet der Compiler T als ab int und N als 6. Wenn b übergeben wird, ist T ebenfalls int und N ist 1.

Spezialisierung der Funktionsvorlage

Basierend auf den abgeleiteten Werten von T und N generiert der Compiler separate, spezialisierte Versionen der Funktionsvorlage. Für jeden Aufruf wird eine Spezialfunktion mit den spezifischen Typ- und Größeninformationen des Argumentarrays erstellt.

In diesem speziellen Fall werden zwei Spezialfunktionen generiert:

  • cal_size_int_6 für int [6] Arrays
  • cal_size_int_1 für int[1] Arrays

The Die Hauptfunktion bedeutet im Wesentlichen den Aufruf dieser Spezialfunktionen.

Das obige ist der detaillierte Inhalt vonWie leitet C die Array-Größe in Funktionsvorlagen ab?. 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