Чем const-объект, выделенный из кучи, отличается от неконст-объекта?

В C++ можно выделить const объект на куче:

const Class* object = new const Class();
const_cast( object )->NonConstMethod(); // UB

так что попытка записи в объект будет UB.

Я не понимаю, чем такой объект будет отличаться от объекта, выделенного из кучи, который не объявлен const:

const Class* object = new Class();

То есть, когда я выделяю объект на стеке, он переходит в автоматическое хранилище, которое специфично для конкретной реализации, и поэтому могут быть какие-то специфичные для реализации средства, которые позволят выделять const объекты каким-то особым образом, что даст UB при записи в объект.

Однако всякий раз, когда я использую new, компилятор обязан выдать вызов функции operator new(), и эта функция не может делать ничего другого - она просто выделяет память единообразным образом, независимо от того, была ли в моем коде const.

Чем const объект, выделенный из кучи, отличается от не const объекта и как возможно неопределенное поведение, если я попытаюсь его изменить?

11
задан Community 23 May 2017 в 11:55
поделиться