Pourquoi constexpr devrait être statique?
Après avoir lu ceci et cela, je me sens toujours confus à propos de ce genre d'expressions:
static constexpr int = 0;
AFAIK, en C ++:
staticgarantit une adresse mémoire à vie tout au long de l'exécution et une initialisation sûre avec des threads simultanésconstexprassure l'évaluation de la compilation du temps en tant que rvalue, ce qui signifie qu'il ne doit pas avoir d'adresse mémoire
Ils me semblent contradictoires. staticgarantit que la variable aura une adresse mémoire à long terme tandis que constexprgarantit l'hypothèse inverse. Étonnamment, la discussion dans le premier lien mentionne ceci:
constexpr int x = 3;
const int* p = &x;
Comment pouvons-nous même obtenir l'adresse mémoire de xsi c'est une rvalue?
Quelqu'un pourrait-il l'expliquer? Merci d'avance
Réponses
statica plusieurs significations. Dans les classes (selon votre commentaire), cela signifie que le membre est associé à la classe, et non à une instance spécifique (objet) de cette classe.
Pour un constexpr, cela a beaucoup de sens. Cela est généralement initialisé par une valeur connue du compilateur et non par des arguments ctor.