Warum sollte constexpr statisch sein?

Nov 16 2020

Nachdem ich dies und das gelesen habe, bin ich immer noch verwirrt über diese Art von Ausdrücken:

static constexpr int = 0;

AFAIK in C ++:

  • static Gewährleistet eine lebenslange Speicheradresse während der gesamten Ausführung und eine sichere Initialisierung mit gleichzeitigen Threads
  • constexpr Gewährleistet die Auswertung der Zeitkompilierung als rWert, dh es darf keine Speicheradresse haben

Sie sehen für mich widersprüchlich aus. staticstellt sicher, dass die Variable eine Langzeitspeicheradresse hat, während constexprdie entgegengesetzte Annahme sichergestellt wird. Überraschenderweise erwähnt die Diskussion im ersten Link Folgendes:

constexpr int x = 3;
const int* p = &x;

Wie können wir überhaupt die Speicheradresse erhalten, xwenn es sich um einen Wert handelt?

Könnte es jemand erklären? Danke im Voraus

Antworten

1 MSalters Nov 16 2020 at 17:10

statichat eine Reihe von Bedeutungen. In Klassen (gemäß Ihrem Kommentar) bedeutet dies, dass das Mitglied der Klasse zugeordnet ist und nicht einer bestimmten Instanz (Objekt) dieser Klasse.

Für a constexprmacht das sehr viel Sinn. Dies wird normalerweise durch einen dem Compiler bekannten Wert und nicht durch ctor-Argumente initialisiert.