¿Por qué constexpr debería ser estático?

Nov 16 2020

Después de leer esto y esto , todavía me siento confundido acerca de este tipo de expresiones:

static constexpr int = 0;

AFAIK, en C ++:

  • static garantiza una dirección de memoria de por vida a lo largo de toda la ejecución y una inicialización segura con subprocesos simultáneos
  • constexpr asegura la evaluación de la compilación del tiempo como rvalue, lo que significa que no tendrá dirección de memoria

Me parecen contradictorios. staticasegura que la variable tendrá una dirección de memoria de larga duración, mientras que constexprasegura la suposición opuesta. Sorprendentemente, la discusión en el primer enlace menciona esto:

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

¿Cómo podemos obtener la dirección de memoria de xsi es un valor r?

¿Alguien podría explicarlo? Gracias por adelantado

Respuestas

1 MSalters Nov 16 2020 at 17:10

statictiene varios significados. En las clases (según su comentario), significa que el miembro está asociado con la clase, y no una instancia específica (objeto) de esa clase.

Para un constexpr, eso tiene mucho sentido. Por lo general, se inicializa mediante un valor conocido por el compilador y no a partir de los argumentos de ctor.