Dlaczego constexpr powinno być statyczne?

Nov 16 2020

Po przeczytaniu tego i tego nadal czuję się zdezorientowany w związku z tego rodzaju wyrażeniami:

static constexpr int = 0;

AFAIK, w C ++:

  • static zapewnia adres pamięci przez cały czas trwania całego wykonania i bezpieczną inicjalizację z współbieżnymi wątkami
  • constexpr zapewnia obliczanie czasu kompilacji jako rvalue, co oznacza, że ​​nie może mieć adresu pamięci

Wydają mi się sprzeczne. staticzapewnia, że ​​zmienna będzie miała długi adres pamięci, podczas gdy constexprzapewnia przeciwne założenie. Co zaskakujące, w dyskusji w pierwszym linku wspomniano o tym:

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

Jak możemy w ogóle uzyskać adres pamięci, xjeśli jest to wartość r?

Czy ktoś mógłby to wyjaśnić? Z góry dziękuję

Odpowiedzi

1 MSalters Nov 16 2020 at 17:10

staticma wiele znaczeń. W klasach (zgodnie z Twoim komentarzem) oznacza to, że członek jest powiązany z klasą, a nie z konkretną instancją (obiektem) tej klasy.

To constexprma sens. Jest to zwykle inicjowane przez wartość znaną kompilatorowi, a nie z argumentów ctor.