Это отличается, потому что созданный объект имеет другой тип (const Class
вместо просто Class
), и это неопределенное поведение, потому что стандарт так говорит.
Это короткая версия.Там не должно быть причины.(если что-то, обратное верно. Не должно быть причины для чего-то, что является UB. UB является состоянием по умолчанию. Это только когда есть причина, по которой что-то становится четко определенным)
Какдля того, что это означает на практике , или если это действительно может вызвать проблемы, если вы рассматриваете объект как неконстантный, аппаратные средства вряд ли сделают что-то другое.Очевидно, что объект const не будет записан в какую-либо постоянную память (поскольку это невозможно), и страница памяти, на которой он находится, вероятно, не будет помечена как доступная только для чтения после выделения объекта.
Но компилятору разрешено предполагать , что объект является const.Таким образом, он может оптимизировать или преобразовать код таким образом, чтобы это было допустимо, если объект гарантированно не изменяется, но нарушается, если объект был изменен на полпути.аппаратное обеспечение.Const или нет const редко имеет значение на аппаратном уровне.Но это имеет значение в системе типов, и это имеет значение в том, как компилятор может преобразовать код.
Если вы сообщаете компилятору, что объект является const, то компилятор вам верит, игенерирует код в предположении, что объект является постоянным.