No C ++, para declarar um objeto de uma classe que possui uma variável de membro como const, precisamos ter um construtor padrão definido pelo usuário. O código a seguir ilustra isso.
class Some {
int value;
};
int main() {
// error: default initialization of an object of const type 'const Some'
// without a user-provided default constructor
const Some some;
return 0;
}
No entanto, se uma variável de membro pertencente a uma classe for qualificada como mutável, o compilador não relatará nenhum erro. Para referência, eu compilado usando o comando clang++ -std=c++17 -stdlib=libc++ helloworld.cpp -o helloworld.out --debug. Gostaria de saber se este resultado é devido a um erro no compilador ou de acordo com a sintaxe definida na linguagem C ++.
class Some {
mutable int value;
};
int main() {
const Some some;
return 0;
}
mutableé o oposto de const. Por que você esperava o mesmo efeito?
const, o que significa que ele não pode ser alterado e, com valores não inicializados, não há utilidade para esse tipo de código e é por isso que é proibido. Quando você usa a mutablepalavra-chave - significa que o valor pode ser alterado posteriormente, para que o código possa ser usado de maneira previsível.