Perché constexpr dovrebbe essere statico?

Nov 16 2020

Dopo aver letto questo e questo mi sento ancora confuso su questo tipo di espressioni:

static constexpr int = 0;

Per quanto ne so, in C ++:

  • static assicura l'indirizzo di memoria a vita lungo l'intera esecuzione e l'inizializzazione sicura con thread simultanei
  • constexpr assicura la valutazione della compilazione del tempo come rvalue, il che significa che non deve avere un indirizzo di memoria

Mi sembrano contraddittori. staticassicura che la variabile abbia un indirizzo di memoria a lungo termine mentre constexprgarantisce l'assunzione opposta. Sorprendentemente, la discussione nel primo collegamento menziona questo:

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

Come possiamo ottenere anche l'indirizzo di memoria di xse è un valore?

Qualcuno potrebbe spiegarlo? Grazie in anticipo

Risposte

1 MSalters Nov 16 2020 at 17:10

staticha una serie di significati. Nelle classi (secondo il tuo commento), significa che il membro è associato alla classe e non a un'istanza specifica (oggetto) di quella classe.

Per a constexpr, questo ha molto senso. Viene tipicamente inizializzato da un valore noto al compilatore e non da argomenti ctor.