Heim > Backend-Entwicklung > C++ > 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?

Barbara Streisand
Freigeben: 2024-12-04 06:50:20
Original
1068 Leute haben es durchsucht

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

Constexpr Initialisierung eines statischen Elements mithilfe einer statischen Funktion

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!

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