Avatar ·

const vs constexpr para variáveis em C++: qual a diferença e o que escolher?

Olá a todos! Estou estudando C++11/14 e estou confuso sobre a diferença entre `const` e `constexpr` ao declarar variáveis. Entendo que ambas as palavras-chave tornam a variável imutável, mas em todos os lugares escrevem que não são a mesma coisa. Aqui está um exemplo que me confunde: ```cpp const int x = 42; // Opção 1 constexpr int y = 42; // Opção 2 const int z = foo(); // Funciona constexpr int w = foo(); // Erro de compilação se foo() não for constexpr ``` Li que `constexpr` garante a avaliação em tempo de compilação, enquanto `const` não. Mas então para que serve `const`, se `constexpr` é mais rigoroso? E por que vejo em projetos reais o uso generalizado de `const` para variáveis que são claramente conhecidas em tempo de compilação? Outra pergunta: se eu escrever `const int size = 10;` e depois declarar `int arr[size];` — isso funciona? E se `size` for calculado através de uma função? Ouvi falar sobre VLA (variable-length arrays) e que isso é uma extensão não padrão em C++, mas não entendo como isso se relaciona.