Я думаю, что соответствующая цитата:
§ 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.
примеры иллюстрируют точку с помощью const_cast
. Как отметил Джеймс: цитату можно найти в §7.1.5 в стандарте C++ 03.
Немного проработки: это языковое правило позволяет компилятору использовать постоянную память (если она доступна в целевой архитектуре), когда что-то объявлено const
. Без этого правила const
-ness всегда можно отбросить, не опасаясь каких-либо последствий, и использовать его будет только вопросом дисциплины разработчика. Как вы можете, по крайней мере, сказать людям, что они ссылаются на UB, что обычно является хорошим сдерживающим фактором. Сам const_cast
имеет второстепенное значение, так как не имеет значения, как вы обманываете компилятор, позволяя манипулировать объектом const
.
Я уверен, что изменение того, что вы объявляете const, является неопределенным поведением, но я уверен, что кто-то может выкопать точное утверждение. –
+1 для обеспечения минимальной полной программы выборки. Для получения дополнительной информации см. Http://sscce.org/. –