En C ++, para declarar un objeto de una clase que tiene una variable miembro como const, debemos tener un constructor predeterminado definido por el usuario. El siguiente código ilustra esto.
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;
}
Sin embargo, si una variable miembro propiedad de una clase se califica como mutable, el compilador no informará ningún error. Como referencia, compilé usando el comando clang++ -std=c++17 -stdlib=libc++ helloworld.cpp -o helloworld.out --debug. Me pregunto si este resultado se debe a un error en el compilador o de acuerdo con la sintaxis definida en el lenguaje C ++.
class Some {
mutable int value;
};
int main() {
const Some some;
return 0;
}
mutablees un poco lo contrario de const. ¿Por qué esperabas el mismo efecto?
const, lo que significa que no se puede cambiar y que tiene valores no inicializados, no hay uso para este tipo de código y es por eso que está prohibido. Cuando usa la mutablepalabra clave, significa que el valor se puede cambiar más tarde, por lo que el código se puede usar de manera predecible.