Frage:
Obwohl es möglich ist, eine Klassenvorlage mit zu definieren Standard-Vorlagenargumente, wie unten zu sehen:
<code class="cpp">template <typename T = int> class Foo { };</code>
Warum ist es notwendig, Vorlagenargumente anzugeben, wenn die Klasse im folgenden Beispiel instanziiert wird?
<code class="cpp">Foo<int> me;</code>
Antwort:
Im Gegensatz zu dem, was die Frage vermuten lässt, ist es nicht notwendig, Vorlagenargumente explizit anzugeben, wenn eine Klassenvorlage mit Standardvorlagenargumenten definiert wird. Ab C 17 ist folgender Code gültig:
<code class="cpp">Foo me;</code>
Vor C 17 war jedoch folgende Syntax erforderlich:
<code class="cpp">Foo<> me;</code>
Das bedeutet, dass die Template-Argumente sein müssen vorhanden, auch wenn sie leer sind. Dieses Verhalten ist analog zum Aufrufen einer Funktion mit einem einzelnen Standardargument, wobei sowohl foo() als auch foo ohne Argumente gültige Ausdrücke sind, aber nur ersteres die Funktion aufruft.
Durch die Einführung von Standardvorlagenargumenten, C 11 erleichterte die Arbeit mit Klassenvorlagen, indem es eine Möglichkeit bot, Standardwerte für Vorlagenparameter festzulegen. Darüber hinaus hat sich diese Syntax im Laufe der Zeit weiterentwickelt, um die Benutzerfreundlichkeit zu verbessern, wie die Verhaltensänderung zwischen C 11 und C 17 zeigt.
Das obige ist der detaillierte Inhalt vonWarum muss ich immer noch Vorlagenargumente angeben, wenn ich Standardvorlagenargumente in C verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!