La diferencia es semántica - i. mi. mismo código generado, los mismos resultados de tiempo de ejecución (const
ness es una construcción puramente de tiempo de compilación de todos modos), pero las dos construcciones transmiten un significado ligeramente diferente.
La idea es que use mutable
para las variables que están en la clase, pero que no constituyen el estado del objeto. El ejemplo clásico es la posición actual en un objeto blob. Navegar en el blob no cuenta como "modificar" el blob de una manera que importe. Al usar mutable
, dices "esta variable puede cambiar, pero el objeto sigue siendo el mismo". Estás diciendo que para esta clase en particular, const
-ness no significa "todas las variables están congeladas".
const_cast
, por otro lado, significa que está violando la exactitud de la constidad existente y espera salirse con la suya. Probablemente porque está trabajando con una API de un tercero que no respeta const
(por ejemplo, una versión antigua basada en C).