¿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!
<<>>