Avatar ·

¿Cuál es la diferencia entre constexpr y const en C++?

¡Hola a todos! Empecé a estudiar C++11 y me encontré con la nueva palabra clave `constexpr`. Antes siempre usaba `const` para declarar variables inmutables. Pero ahora también apareció `constexpr`, y no termino de entender cuándo aplicar cada uno. Por ejemplo, escribo este código: ```cpp const int size = 5; int arr[size]; // Esto funciona ``` Pero si escribo: ```cpp int get_size() { return 5; } const int size = get_size(); int arr[size]; // ¡Error de compilación en estándares antiguos! ``` Entiendo que `const` simplemente prohíbe modificar la variable después de la inicialización, pero no garantiza que el valor sea conocido en tiempo de compilación. Al mismo tiempo, veo ejemplos con `constexpr`: ```cpp constexpr int square(int x) { return x * x; } constexpr int val = square(5); // Ok, se calcula en compile-time ``` Preguntas: 1. ¿Cuál es la diferencia fundamental entre `const` y `constexpr` para variables? 2. ¿Cuándo se debe usar `constexpr` para funciones? 3. ¿Puede `constexpr` reemplazar a `const`?