Avatar ·

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

¡Hola! Recientemente comencé a estudiar C++11 y me topé con la palabra clave `constexpr`. Entiendo que `const` significa que el valor de una variable no puede cambiarse después de la inicialización. Pero `constexpr` también parece hacer que una variable sea constante. Entonces, ¿cuál es la diferencia? Por ejemplo, puedo escribir: ```cpp const int x = 5; constexpr int y = 5; ``` Ambas opciones funcionan. Pero he oído que `constexpr` se puede usar con funciones. Lo intenté: ```cpp constexpr int square(int n) { return n * n; } int main() { const int a = square(5); // ¿Funciona? constexpr int b = square(5); // ¿También funciona? int arr[ square(3) ]; // ¿Se puede hacer así? } ``` Esto se compila, pero no entiendo cuál es la ventaja real. ¿Cuándo debo usar `constexpr` en lugar de `const`? ¿Y por qué no es suficiente solo `const`? Me parece que es una duplicación de funcionalidad. Explíquenme, por favor, con ejemplos cuándo aplicar cada uno. ¡Gracias de antemano! <<>>

La diferencia clave: