Heim >Backend-Entwicklung >C++ >Kann ein statisches Constexpr-Mitglied mithilfe einer Constexpr-Funktion in C initialisiert werden?
Ursprüngliche Frage:
In C , ist es möglich, einen constexpr-Wert (Kompilierungszeitkonstante) aus einer constexpr-Funktion zu berechnen und als statisches Mitglied einer Klasse speichern?
Erste Versuche und Antwort des Compilers:
Der erste Versuch, eine statische constexpr-Funktion foo innerhalb der Klasse zu definieren und zu initialisieren Eine statische constexpr-Mitgliedsleiste mit foo ist mit Fehlern sowohl in g -4.5.3 als auch in g fehlgeschlagen -4.6.3.
Erklärung:
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 konstanten Ausdruck 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, Hervorhebung Compilerspezifische Einschränkungen.
Schlussfolgerung:
Gemäß dem C-Standard ist die Initialisierung eines statischen constexpr-Datenelements mit einem Initialisierer, der einen constexpr-Funktionsaufruf beinhaltet, außerhalb von nicht zulässig Definition einer constexpr-Funktion oder eines constexpr-Konstruktors. 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.
Das obige ist der detaillierte Inhalt vonKann ein statisches Constexpr-Mitglied mithilfe einer Constexpr-Funktion in C initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!