La differenza è semantica - i. e. stesso codice generato, stesso risultato in tempo di esecuzione (const
ness è comunque un costrutto puramente in fase di compilazione), ma i due costrutti trasmettono un significato leggermente diverso.
L'idea è di utilizzare mutable
per le variabili presenti nella classe, ma che non costituiscono lo stato dell'oggetto. L'esempio classico è la posizione corrente in un oggetto blob. Navigare nel blob non conta come "modificare" il blob in un modo che conta. Usando mutable
, stai dicendo "questa variabile può cambiare, ma l'oggetto è sempre lo stesso". Stai affermando che per questa particolare classe, const
-ness non significa "tutte le variabili sono congelate".
const_cast
, al contrario, significa che stai violando la correttezza const esistente e sperare di farla franca. Probabilmente perché stai lavorando con un'API di terze parti che non rispetta lo const
(ad esempio una vecchia scuola basata su C).
fonte
2012-07-12 18:15:58