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 mutable
palavra-chave - significa que o valor pode ser alterado posteriormente, para que o código possa ser usado de maneira previsível.