Avatar ·

Qual é a diferença entre constexpr e const em C++?

Olá a todos! Comecei a estudar C++11 e me deparei com a nova palavra-chave `constexpr`. Antes, eu sempre usava `const` para declarar variáveis imutáveis. Mas agora apareceu também `constexpr`, e não consigo entender completamente quando usar cada um. Por exemplo, escrevo este código: ```cpp const int size = 5; int arr[size]; // Isso funciona ``` Mas se eu escrever: ```cpp int get_size() { return 5; } const int size = get_size(); int arr[size]; // Erro de compilação em padrões antigos! ``` Entendo que `const` apenas proíbe a modificação da variável após a inicialização, mas não garante que o valor seja conhecido em tempo de compilação. Ao mesmo tempo, vejo exemplos com `constexpr`: ```cpp constexpr int square(int x) { return x * x; } constexpr int val = square(5); // Ok, calculado em compile-time ``` Perguntas: 1. Qual é a diferença fundamental entre `const` e `constexpr` para variáveis? 2. Quando devo usar `constexpr` para funções? 3. O `constexpr` pode substituir o `const`?