„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kann ein statisches Constexpr-Mitglied mithilfe einer Constexpr-Funktion in C++ initialisiert werden?

Kann ein statisches Constexpr-Mitglied mithilfe einer Constexpr-Funktion in C++ initialisiert werden?

Veröffentlicht am 22.12.2024
Durchsuche:631

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Constexpr initialisiert statisches Mitglied mit statischer Funktion

Ursprüngliche Frage:

In C, Ist es möglich, einen constexpr-Wert (Kompilierungszeitkonstante) aus einer constexpr-Funktion zu berechnen und ihn als statisches Mitglied von a zu speichern? Klasse?

Erste Versuche und Antwort des Compilers:

Der erste Versuch, eine statische Constexpr-Funktion foo innerhalb der Klasse zu definieren und eine statische Constexpr-Mitgliedsleiste mit foo zu initialisieren, ist fehlgeschlagen mit Fehlern sowohl in g -4.5.3 als auch in g -4.6.3.

Erläuterung:

Gemäß dem C-Standard kann ein statisches constexpr-Datenelement in der Klassendefinition mit einer geschweiften Klammer oder gleich initialisiert werden -initializer, wobei jede Initialisierungsklausel ein konstanter Ausdruck sein muss. Der bereitgestellte Code verstieß gegen diese Regel, da die Initialisierung von bar auf dem Konstantenausdruck foo(sizeof(int)) im Klassenkörper beruhte und es sich somit nicht um einen konstanten Ausdruck handelte.

Weitere Analyse:

Weitere Versuche, einschließlich des Verschiebens der constexpr-Funktionsdefinition außerhalb des Klassenkörpers, führten immer noch zu Fehlern in g -4.6.3, die Compiler-spezifisch hervorhoben Einschränkungen.

Schlussfolgerung:

Gemäß dem C-Standard ist die Initialisierung eines statischen constexpr-Datenelements mit einem Initialisierer, der einen constexpr-Funktionsaufruf beinhaltet, außerhalb der Definition von a nicht zulässig constexpr-Funktion oder constexpr-Konstruktor. Dies ist auf die Anforderung zurückzuführen, dass constexpr-Variablen als Konstanten zur Kompilierungszeit in den Körpern der Mitgliedsfunktionen verfügbar sein müssen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3