Нет. В соответствии с §5.4.4 стандарта C ++, приведения, которые могут быть выполнены приведением в стиле C:
— a const_cast (5.2.11),
— a static_cast (5.2.9),
— a static_cast followed by a const_cast,
— a reinterpret_cast (5.2.10), or
— a reinterpret_cast followed by a const_cast
Это широко известно как "отбрасывание const
-ness", и компилятор не будет соответствовать этой части стандарта, если он не скомпилирует этот код.
Как указывает ildjarn, изменение объекта const
путем отбрасывания const
ness является неопределенным поведением. Эта программа не демонстрирует неопределенного поведения, потому что, хотя объект, на который указывал указатель на const
, сам объект не является const
(спасибо R.Martinho и eharvest за исправление моего плохого чтения).