Heim > Backend-Entwicklung > C++ > Warum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?

Warum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?

DDD
Freigeben: 2024-11-19 06:32:02
Original
504 Leute haben es durchsucht

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

Redundante Vorlagenparameterlisten in Klassenvorlagenkonstruktoren in C 20

In C wurde die Syntax zum Deklarieren von Konstruktoren in Klassenvorlagen geändert in C 20. Bisher wurde Code der folgenden Form berücksichtigt wohlgeformt:

template<typename T>
struct S {
    S<T>();
};
Nach dem Login kopieren

Trotz der Redundanz des Mit dem Template-Parameter in der Konstruktordeklaration wurde dieser Code erfolgreich kompiliert. Allerdings meldet GCC Trunk in C 20 mit aktiviertem Flag -std=c 20 jetzt einen Fehler für diesen Code:

error: expected unqualified-id before ')' token
3 |     S<T>();
^
Nach dem Login kopieren

Während dieser Fehler in GCC10.2 oder Clang mit -std= nicht auftritt c 20, es ergibt sich aus einer grundlegenden Änderung, die in C 20 eingeführt wurde.

Laut dem Abschnitt zur C 20-Kompatibilität ist die Verwendung von a simple-template-id als Deklarator-ID für einen Konstruktor oder Destruktor ist nicht mehr gültig. Dieser Schritt zielt darauf ab, potenziell fehleranfällige Redundanz zu beseitigen.

Der neue Wortlaut im Abschnitt [class.ctor] von C 20 legt fest, dass für Konstruktoren in Mitgliedsdeklarationen innerhalb von Klassenvorlagen stattdessen der injizierte Klassenname verwendet werden sollte :

template<typename T>
struct S {
    S();  // Use injected-class-name
};
Nach dem Login kopieren

In diesem Beispiel stellt S den injizierten Klassennamen für die innere Klassenvorlage dar. Folglich ist das redundante Der Vorlagenparameter wird aus der Konstruktordeklaration entfernt.

Das obige ist der detaillierte Inhalt vonWarum sind redundante Vorlagenparameterlisten in C 20-Klassenvorlagenkonstruktoren jetzt ein Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage