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 ++:
staticzapewnia adres pamięci przez cały czas trwania całego wykonania i bezpieczną inicjalizację z współbieżnymi wątkamiconstexprzapewnia 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.