Heim > Backend-Entwicklung > C++ > Ist die Auflistung redundanter Vorlagenparameter in C 20-Klassenvorlagenkonstruktoren zulässig?

Ist die Auflistung redundanter Vorlagenparameter in C 20-Klassenvorlagenkonstruktoren zulässig?

DDD
Freigeben: 2024-11-26 06:54:10
Original
875 Leute haben es durchsucht

Is Redundant Template Parameter Listing in C  20 Class Template Constructors Allowed?

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>();
};
Nach dem Login kopieren

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>();
                 ^
Nach dem Login kopieren

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.
...
Nach dem Login kopieren

Im Wesentlichen ist die im vorherigen Code verwendete „redundante“ Vorlagenparameterliste S() nicht mehr zulässig. Stattdessen muss der injizierte Klassenname S verwendet werden:

template<typename T>
struct S {
    S(); // CORRECT C++20 syntax
};
Nach dem Login kopieren

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!

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