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.
No answers yet.
Faça login para deixar uma resposta