Heim >Backend-Entwicklung >C++ >Warum funktioniert „Foo me;' nicht mit Standardvorlagenargumenten in C 11?

Warum funktioniert „Foo me;' nicht mit Standardvorlagenargumenten in C 11?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 14:02:02386Durchsuche

Why Does

Überwindung der expliziten Argumentspezifikation für Klassenvorlagen mit Standard-Vorlagenargumenten

C 11 führte Standard-Vorlagenargumente ein, ein Konzept, das zunächst Verwirrung stiftete. Dieser Artikel befasst sich mit diesem Thema und erklärt, warum eine Instanz einer Klassenvorlage mit Standardvorlagenargumenten, wie z. B. „Foo me;“, in main nicht gültig ist.

Betrachten Sie die folgende Klassenvorlage mit einem Standardvorlagenargument of int:

template <typename T = int>
class Foo {};

Obwohl das Standard-Template-Argument vorhanden ist, wird der Code „Foo me;“ führt im Wesentlichen zu einem Kompilierungsfehler. Dies liegt daran, dass leere spitze Klammern wie in „Foo<> me;“ erforderlich sind, um das Standardvorlagenargument explizit anzugeben.

Der Grund für diese Anforderung ist die Notwendigkeit einer konsistenten Syntax bei Funktionsaufrufen. In C erfordert eine Funktion mit einem Standardargument, dass die Argumentsyntax vorhanden ist, auch wenn der Standardwert verwendet wird. Diese Regel erstreckt sich auf Klassenvorlagen mit Standardvorlagenargumenten und gewährleistet so die Konsistenz der Sprachsyntax.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „Foo me;' nicht mit Standardvorlagenargumenten in C 11?. 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