Constexpr-Zeiger-Wert

Ich versuche zu erklären, constexpr-Zeiger initialisiert, um einen Konstanten integer-Wert, aber das Geräusch ist Folierung alle meine versuche:

Versuch 1:

constexpr int* x = reinterpret_cast<int*>(0xFF);

test.cpp:1:20: note: reinterpret_cast is not allowed in a constant expression

Versuch 2:

constexpr int* x = (int*)0xFF;

test.cpp:1:20: note: cast which performs the conversions of a reinterpret_cast is not allowed in a constant expression

Versuch 3:

constexpr int* x = (int*)0 + 0xFF;

test.cpp:1:28: note: cannot perform pointer arithmetic on null pointer

Ist, was ich versuche zu tun nicht erlaubt ist design? Wenn ja, warum? Wenn nicht, wie kann ich es tun?

Hinweis: gcc akzeptiert alle diese.

Warum brauchen Sie eine constexpr hier? Nicht constexpr effektiv das gleiche wie const, wenn Sie nicht mit einer Funktion?
Nun, zum Beispiel, wenn es ein statisches Mitglied einer Klasse, und es ist nicht constexpr, ich kann nicht initialisieren-line.
Vielleicht eine statische inline-Memberfunktion wäre besser geeignet als ein Daten-member.
Sie sind nicht erlaubt zu initialisieren int inline? Zeiger sind int-Werte (nicht alles) nach unten, so dass selbst wenn es nicht ganz standard (ich weiß nicht, ich don ' T haben eine Kopie der standard bei mir) Sie sollten in der Lage, die meisten Compiler akzeptieren es.
clang und gcc nicht akzeptieren, in-line-Initialisierung eines non-constexpr-Zeiger. Ich weiß nicht, warum - ich würde gerne wissen, die Grund für die, auch.

InformationsquelleAutor HighCommander4 | 2012-04-29

Schreibe einen Kommentar