Qual é a diferença entre constexpr e const em C++?
Olá! Recentemente comecei a estudar C++11 e me deparei com a keyword `constexpr`. Eu entendo que `const` significa que o valor de uma variável não pode ser alterado após a inicialização. Mas `constexpr` também parece tornar a variável constante. Qual é a diferença então?
Por exemplo, eu posso escrever:
```cpp
const int x = 5;
constexpr int y = 5;
```
Ambos funcionam. Mas ouvi dizer que `constexpr` pode ser usado com funções. Tentei:
```cpp
constexpr int square(int n) {
return n * n;
}
int main() {
const int a = square(5); // Funciona?
constexpr int b = square(5); // Também funciona?
int arr[ square(3) ]; // Pode fazer isso?
}
```
Isso compila, mas não entendo qual é a vantagem real. Quando devo usar `constexpr` em vez de `const`? E por que apenas `const` não é suficiente? Parece uma duplicação de funcionalidade. Explique, por favor, com exemplos de quando usar cada um. Desde já, obrigado!
<<>>