Esta pergunta é inspirada em uma pergunta sobre final
em java .
Em C / C ++, devo usar const
sempre que possível?
Eu sei que já existe uma pergunta relacionada sobre o uso const
de parâmetros . Infelizmente, essa pergunta e suas respostas não respondem totalmente à minha pergunta, porque é apenas sobre parâmetros de função, mas eu também gostaria de saber sobre outros casos (por exemplo: variáveis locais).
Além disso, quase todas as respostas a essa pergunta dizem que devemos usar, const
pois contém informações úteis sobre a acessibilidade das variáveis. Mas isso parece entrar em conflito com uma resposta sobre o uso final em Java, que afirma final
ser supérfluo se não contiver informações adicionais e, portanto, deve ser omitido para manter o código curto e limpo.
Então, devo usar const
sempre que possível? Se sim, por que o conselho const
em C ++ é diferente do conselho final
em Java?
fonte
final
econst
não tem as mesmas garantias.Pessoalmente,
const
levo muito pouco tempo para escrever e muito pouco tempo para ler, geralmente muito menos do que o necessário para verificar se algum código altera a variável e isso realmente me impede de escrever bugs (alguém já incrementou acidentalmente seu iterador final? Etc)Também acho que ser rigoroso quanto ao uso de const me orienta para um código melhor de outras maneiras, como a criação de funções auxiliares para executar uma inicialização não trivial.
fonte
Discordo dos outros pôsteres e recomendo que você não use de nível superior
const
em variáveis e parâmetros locais. (Referências e indicadores para const, ou sejaconst T&
, são diferentes, e você deve usá-los para correção sempre que for apropriado.)As vantagens do nível superior
const
são:As desvantagens são:
Não pode ser usado em variáveis "pseudo-const", ou seja, variáveis que são inicializadas de alguma maneira mais complicadas que a construção direta, mas não modificadas depois, por exemplo, usando
getline
:Impede a otimização da mudança de chamada e retorno de função:
Eu trabalhei em uma base de código onde o local
const
era muito usado, e não achei nada útil, mas ele preenchia o código com pessimizações sutis, como acima. Pessoalmente, prefiro adotar uma política geral de modificar variáveis o mais raramente possível e tornar as funções pequenas o suficiente para que o uso de uma variável seja óbvio, e mesmo que seja modificado, a complexidade da função é baixa o suficiente para torná-la não -questão.fonte
const
locais: porque impede modificações técnicas, não apenas modificações conceituais.A
const
palavra-chave deve ser usada para variáveis locais, assim como parâmetros. É útil porque:const
deve levar apenas um segundo para escrever, então não é grande coisa.Observe que não há resposta certa / errada aqui. No seu link, a pessoa que respondeu com mais votos positivos
final
não deve ser usada localmente. No entanto, o próximo respondente o recomendou fortemente.Se sua função é simples e trivial , você não deve adicionar
const
porque todos entendem sua intenção. No entanto, se a lógica em sua função não for trivial, você deve usar a palavra-chave Lembre-se, há pouco a perder.fonte