Heim > Backend-Entwicklung > C++ > Wie kann ich ein statisches Consexpr-Mitglied mit einer statischen Funktion in C initialisieren?

Wie kann ich ein statisches Consexpr-Mitglied mit einer statischen Funktion in C initialisieren?

Linda Hamilton
Freigeben: 2024-12-07 21:42:14
Original
310 Leute haben es durchsucht

How Can I Initialize a Static Constexpr Member with a Static Function in C  ?

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage