В С++ можно выделить объект const в куче:
const Class* object = new const Class();
const_cast<Class*>( object )->NonConstMethod(); // UB
так что попытка записи в объект будет UB.
Я не понимаю, как такой объект будет отличаться от объекта, выделенного кучей, который не объявлен const
:
const Class* object = new Class();
Я имею в виду, когда я выделяю объект в стеке, он переходит в автоматическое хранилище, которое является специфичным для реализации, и поэтому могут быть некоторые средства реализации, которые позволяли бы выделять объекты const
каким-то особым образом, что дало бы UB, когда я пишите в объект.
Однако всякий раз, когда я использую new
, компилятор должен испускать функцию operator new()
invocation, и эта функция не может делать ничего другого - она просто распределяет память единообразно, независимо от того, был ли const
в моем код.
Как объект const
, выделенный для кучи, отличается от него не const
, и как возможно поведение undefined, если я пытаюсь его изменить?