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
DDDOriginal
2024-11-26 06:54:10876Durchsuche

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>();
};

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() nicht mehr zulässig. Stattdessen muss der injizierte Klassenname S verwendet werden:

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!

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