Statische Member Constexpr mithilfe statischer Funktionen initialisieren
Problem:
Sie möchten a definieren constexpr-Mitglied mit einer statischen Funktion und initialisiert es zur Kompilierungszeit mit einem berechneten Wert. Bei dem Versuch, dies in GCC zu tun, treten jedoch Kompilierungsfehler auf.
Erste Versuche:
Bei Ihrem ersten Versuch wurden der statische constexpr-Member und die statische Funktion in die Klassendefinition eingefügt und ausgelöst Kompilierungsfehler in älteren Versionen von GCC. Ihr zweiter Versuch hat diese Elemente außerhalb des Klassenkörpers verschoben, aber auch hier traten in späteren Versionen Probleme auf.
Erklärung:
Der C-Standard schreibt spezifische Anforderungen für constexpr static vor Datenelemente. Diese Mitglieder müssen mit einem Klammer-oder-Gleich-Initialisierer initialisiert werden, wobei jede Zuweisung ein konstanter Ausdruck ist. Bei Ihrem „zweiten Versuch“ haben Sie sich nicht an dieses Format gehalten.
Lösung:
Leider ist die Initialisierung eines statischen constexpr-Datenelements mithilfe einer statischen Funktion derzeit nicht möglich nach C-Standard möglich. Dies liegt daran, dass constexpr-Variablen als Konstanten zur Kompilierungszeit in den Körpern der Mitgliedsfunktionen verfügbar sein müssen. Statische Funktionen sind jedoch undefiniert, bis die Klasse vollständig ist, was es unmöglich macht, dass der Ausdruck ein konstanter Ausdruck ist.
Beobachtetes Problem in GCC:
Ihr erster Versuch hätte gültig sein sollen, aber möglicherweise sind in früheren Versionen von GCC Fehler aufgetreten. Wenn Sie Zugriff auf eine neuere Version von GCC haben, lohnt es sich, den ursprünglichen Code noch einmal auszuprobieren.
Das obige ist der detaillierte Inhalt vonWie kann ich ein statisches Consexpr-Mitglied mit einer statischen Funktion in C initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!