Информация об изменениях

Сообщение Re[21]: Когда это наконец станет defined behavior? от 30.04.2023 10:15

Изменено 30.04.2023 10:21 kov_serg

Re[21]: Когда это наконец станет defined behavior?
Здравствуйте, Евгений Музыченко, Вы писали:

TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!


ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.


Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.
Re[21]: Когда это наконец станет defined behavior?
Здравствуйте, Евгений Музыченко, Вы писали:

TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!


ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.


Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.

ps: на x86 можно вполне использовать диапазон памяти который запрещено писать что бы гарантировать const. Например добавлять 2^60 к адресу и мапить туда всю память но в ro режиме. Всё равно физическая шина <=48бит.
Тогда при попытке записи в const либо ловим где и либо фиксируем и игнорируем либо фиксируем и выходим. Почему так не делают не понятно.