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
Mary-Kate OlsenOriginal
2024-12-05 22:35:13232Durchsuche

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.

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!

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