Avatar ·

const vs constexpr para variables en C++: cuál es la diferencia y qué elegir?

¡Hola a todos! Estoy aprendiendo C++11/14 y estoy confundido sobre la diferencia entre `const` y `constexpr` al declarar variables. Entiendo que ambas keywords hacen que una variable sea inmutable, pero en todas partes escriben que no son lo mismo. Aquí hay un ejemplo que me confunde: ```cpp const int x = 42; // Opción 1 constexpr int y = 42; // Opción 2 const int z = foo(); // Funciona constexpr int w = foo(); // Error de compilación si foo() no es constexpr ``` He leído que `constexpr` garantiza la evaluación en tiempo de compilación, mientras que `const` no. Pero entonces, ¿para qué sirve `const` si `constexpr` es más estricto? ¿Y por qué veo en proyectos reales un uso generalizado de `const` para variables que son claramente conocidas en tiempo de compilación? Otra pregunta: si escribo `const int size = 10;` y luego declaro `int arr[size];` — ¿funcionará? ¿Y si `size` se calcula a través de una función? He oído sobre VLA (variable-length arrays) y que es una extensión no estándar en C++, pero no entiendo cómo se relaciona con `const`.