Heim > Backend-Entwicklung > C++ > Können C 14-Compiler nicht-constexpr-Standardbibliotheksfunktionen konform als „constexpr' behandeln?

Können C 14-Compiler nicht-constexpr-Standardbibliotheksfunktionen konform als „constexpr' behandeln?

Mary-Kate Olsen
Freigeben: 2024-12-05 22:35:13
Original
232 Leute haben es durchsucht

Can C  14 Compilers Conformingly Treat Non-constexpr Standard Library Functions as `constexpr`?

Konforme Compiler-Erweiterung für constexpr-Behandlung von Nicht-constexpr-Standardbibliotheksfunktionen?

In C 11 schien der Standardentwurf die Behandlung von Standards zu ermöglichen Die Bibliothek fungiert als constexpr, auch wenn sie nicht explizit als solche gekennzeichnet wurde. Diese Haltung hat sich jedoch inzwischen weiterentwickelt.

C 14 Evolution

In C 14 wird ausdrücklich darauf hingewiesen, dass nicht standardmäßig erforderliche Funktionen nicht als constexpr deklariert werden sollten Implementierungen. Dies ist in Abschnitt 17.6.5.6 des C 14-Standardentwurfs dargelegt:

An implementation shall not declare any standard library function signature as constexpr except for those where it is explicitly required.
Nach dem Login kopieren

Diese Entscheidung wurde getroffen, um Implementierungsdivergenzen zu verhindern, insbesondere wenn die Verwendung von SFINAE zu unterschiedlichem beobachtbarem Verhalten führt.

GCC-Implementierung

GCC behandelte zuvor bestimmte nicht-constexpr-Standardbibliotheksfunktionen als constexpr basierend auf dem früheren LWG 2013-Vorschlagsbeschluss. Allerdings gilt dieses Verhalten in C 14 nicht mehr als konform.

Warnungsabwesenheit im strikten Modus

Trotz der Nichtkonformität generiert GCC im strikten Konformitätsmodus keine Warnungen ( -std=c 11 -pedantisch). Hierbei handelt es sich wahrscheinlich um ein Versehen, das in zukünftigen Updates behoben wird.

Ausnahme für intrinsische Funktionen

Intrinsische Compilerfunktionen unterliegen nicht denselben Regeln wie Standardbibliotheksfunktionen. Daher sollte die Verwendung intrinsischer Funktionen wie:

static constexpr double a = __builtin_cos(3.);
Nach dem Login kopieren

als konform betrachtet werden.

Fazit

Nicht-constexpr-Standardbibliotheksfunktionen werden wie derzeit mit constexpr behandelt eine nicht konforme Erweiterung in C 14. Während GCC dies in C 11 auf der Grundlage einer früheren Vorschlagsresolution zuließ, Es wird erwartet, dass diese Erweiterung entfernt oder geändert wird, um dem aktuellen C 14-Standard zu entsprechen.

Das obige ist der detaillierte Inhalt vonKönnen C 14-Compiler nicht-constexpr-Standardbibliotheksfunktionen konform als „constexpr' behandeln?. 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