Heim > Backend-Entwicklung > C++ > Ist die Constexpr-Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen durch GCC eine konforme Erweiterung?

Ist die Constexpr-Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen durch GCC eine konforme Erweiterung?

Susan Sarandon
Freigeben: 2024-11-30 01:49:09
Original
734 Leute haben es durchsucht

Is GCC's Constexpr Treatment of Non-Constexpr Standard Library Functions a Conforming Extension?

Ist die Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen als Constexpr eine konforme Compiler-Erweiterung?

Aktuelle C-Standards schreiben vor, dass Standardbibliotheksfunktionen als deklariert werden müssen constexpr nur, wenn dies ausdrücklich erforderlich ist. Frühere Entwürfe legten jedoch etwas anderes nahe.

C 11 und der Draft Standard

Während der Entwicklung von C 11 zielte ein Vorschlag darauf ab, die Behandlung von nicht-constexpr-Standardbibliotheksfunktionen explizit als zu ermöglichen constexpr. Die Entscheidung von GCC, diese Funktion im strikten Konformitätsmodus zu unterstützen, basierte auf diesem Entwurf.

Konsensverschiebung in C 14

Der Konsens änderte sich jedoch während der Entwicklung von C 14. Der Vorschlag wurde geändert und der endgültige Standard besagt, dass es Implementierungen untersagt ist, eine Standardbibliotheksfunktion constexpr zu deklarieren, es sei denn, dies ist ausdrücklich erforderlich.

Diese Änderung ist auf Bedenken hinsichtlich unterschiedlichem Verhalten zwischen Implementierungen zurückzuführen, da SFINAE dies nutzen könnte, um unterschiedliche zu erzeugen Ergebnisse für identischen Code.

Konformität für GCC

GCCs aktuelle Implementierung für In diesem Fall handelt es sich um eine nicht konforme Erweiterung, da sie gegen den C 14-Standard verstößt. Um die Konformität zu erreichen, müsste GCC Warnungen ausgeben oder diese Funktion im strikten Konformitätsmodus deaktivieren.

Intrinsische Funktionen

Intrinsische Compilerfunktionen sind im Gegensatz zu Standardbibliotheksfunktionen davon ausgenommen Regel, da sie nicht durch die Norm abgedeckt sind. Daher ist die Behandlung intrinsischer Werte als constexpr grundsätzlich zulässig.

Das obige ist der detaillierte Inhalt vonIst die Constexpr-Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen durch GCC eine konforme Erweiterung?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage