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;
}
mutable
es 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 mutable
palabra clave, significa que el valor se puede cambiar más tarde, por lo que el código se puede usar de manera predecible.