In C ++ benötigen const
wir einen benutzerdefinierten Standardkonstruktor , um ein Objekt einer Klasse mit einer Mitgliedsvariablen als zu deklarieren . Der folgende Code veranschaulicht dies.
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;
}
Wenn jedoch eine Mitgliedsvariable, die einer Klasse gehört, als veränderbar qualifiziert ist, meldet der Compiler keine Fehler. Als Referenz habe ich mit dem Befehl kompiliert clang++ -std=c++17 -stdlib=libc++ helloworld.cpp -o helloworld.out --debug
. Ich frage mich, ob dieses Ergebnis auf einen Fehler im Compiler oder auf die in der C ++ - Sprache definierte Syntax zurückzuführen ist.
class Some {
mutable int value;
};
int main() {
const Some some;
return 0;
}
mutable
ist das Gegenteil von const
. Warum haben Sie den gleichen Effekt erwartet?
const
, was bedeutet, dass es nicht geändert werden kann und dass es nicht initialisierte Werte hat, gibt es keine Verwendung für diese Art von Code und deshalb ist es verboten. Wenn Sie das mutable
Schlüsselwort verwenden, bedeutet dies, dass der Wert später geändert werden kann, sodass der Code auf vorhersehbare Weise verwendet werden kann.