Heim >Backend-Entwicklung >C++ >Können C 14-Compiler nicht-constexpr-Standardbibliotheksfunktionen konform als „constexpr' behandeln?
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.
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.);
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!