quais são as diferenças entre bec?
c possui um inicializador constante em tempo de compilação, enquanto b não. Um objeto const com inicializador de constante de tempo de compilação é ele próprio um valor constante de tempo de compilação.
Como posso definir um décimo de um arry usando uma constante, então por que isso não funciona?
Não é apenas uma constante que serve. const
O qualificador implica a constância do tempo de execução (ou seja, o valor pode ser determinado no tempo de execução, mas não será alterado ao longo da vida útil do objeto). Somente valores constantes de tempo de compilação podem ser usados como tamanho da matriz.
O termo "constante" é realmente ambíguo e a palavra
const
- chave é enganosa.const
significa: "não permitir que o valor desse objeto não seja alterado após a inicialização". Isso não significa "constante em tempo de compilação". Seu valor inicial pode (e geralmente vem) ainda vir de fontes de tempo de execução.Você precisa de uma constante em tempo de compilação para um array vinculado.
Às vezes, é possível ter um objeto nomeado
foo
que seja constante em tempo de compilação, se forconst
e foi inicializado a partir de uma expressão constante, como um literal ouconstexpr
algo. Esse é o casoc
; não é o casob
.fonte