creo que la cita relevante es:
§ 7.1.6.1 (4) from N3242:
Except that any class member declared mutable can be modified, any attempt to modify a const object during its lifetime results in undefined behavior.
Los ejemplos ilustran el punto usando const_cast
. Como señaló James: la cita se puede encontrar en §7.1.5 en el estándar C++ 03.
Una pequeña elaboración: esa regla de lenguaje permite que el compilador use memoria de solo lectura (si está disponible en la arquitectura de destino) cuando algo se declara const
. Sin esta regla, const
-ness siempre se puede descartar sin temor a ninguna consecuencia y su uso solo sería una cuestión de disciplina del desarrollador. De esta forma, al menos puedes decirle a la gente que está invocando a UB, que generalmente es un buen elemento de disuasión. El const_cast
es de menor importancia, ya que no importa cómo engañe al compilador para que le permita manipular un objeto const
.
Estoy bastante seguro de que modificar algo que declare const es un comportamiento indefinido, pero estoy seguro de que alguien puede desenterrar la declaración precisa. –
+1 para proporcionar un programa de muestra completo mínimo. Para obtener más información, consulte http://sscce.org/. –