Por que constexpr deve ser estático?

Nov 16 2020

Depois de ler isto e isto ainda me sinto confuso sobre este tipo de expressões:

static constexpr int = 0;

AFAIK, em C ++:

  • static garante o endereço de memória vitalícia ao longo de toda a execução e inicialização segura com threads simultâneos
  • constexpr garante avaliação de tempo de compilação como rvalue, o que significa que não deve ter endereço de memória

Eles parecem contraditórios para mim. staticgarante que a variável terá um endereço de memória de longa data, enquanto constexprgarante a suposição oposta. Surpreendentemente, a discussão no primeiro link menciona isso:

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

Como podemos obter o endereço de memória de xse é um rvalue?

Alguém poderia explicar isso? desde já, obrigado

Respostas

1 MSalters Nov 16 2020 at 17:10

statictem vários significados. Em classes (por seu comentário), significa que o membro está associado à classe, e não a uma instância específica (objeto) dessa classe.

Para um constexpr, isso faz muito sentido. Normalmente, é inicializado por um valor conhecido pelo compilador, e não por argumentos do ctor.