Avatar ·

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

Diferença chave: