Redundante Vorlagenparameterlisten in Klassenvorlagenkonstruktoren in C 20
Die Gültigkeit von Klassenvorlagenkonstruktoren mit redundanten Vorlagenparameterlisten wird seitdem diskutiert die Einführung von C 20. Hier ist das Problem und seine Lösung:
In C 17 wurde der folgende Code berücksichtigt wohlgeformt:
template<typename T> struct S { S<T>(); };
Allerdings löst in C 20 derselbe Code in einigen Compilern (z. B. gcc Trunk) unter -std=c 20:
error: expected unqualified-id before ')' token 3 | S<T>(); ^
einen Fehler aus Änderung in C 20
Der C 20-Standard schreibt eine Änderung in vor Syntax von Klassenvorlagen-Konstruktordeklarationen. Das folgende Delta im Kompatibilitätsabschnitt des Standards verdeutlicht dies:
[diff.cpp17.class] ... Change: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. Rationale: Remove potentially error-prone option for redundancy. ...
Im Wesentlichen ist die im vorherigen Code verwendete „redundante“ Vorlagenparameterliste S
template<typename T> struct S { S(); // CORRECT C++20 syntax };
Begründung
Der Grund für diese Änderung besteht darin, das Fehlerrisiko zu verringern, indem das nicht zugelassen wird Verwendung einfacher Template-IDs. Durch die Erzwingung der expliziten Verwendung des injizierten Klassennamens kann der Compiler den beabsichtigten Konstruktor genauer auflösen.
Fazit
Diese Änderung in C 20 stellt keinen Fehler dar , sondern eine absichtliche bahnbrechende Änderung, um die Klarheit und Korrektheit der Deklarationen des Klassenvorlagenkonstruktors zu verbessern. Dies kann zwar zu Kompatibilitätsproblemen mit vorhandenem Code führen, der auf der vorherigen Syntax basiert, verbessert aber letztendlich die allgemeine Sicherheit und Zuverlässigkeit von C-Anwendungen.
Das obige ist der detaillierte Inhalt vonIst die Auflistung redundanter Vorlagenparameter in C 20-Klassenvorlagenkonstruktoren zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!