Сообщение Re[21]: Когда это наконец станет defined behavior? от 30.04.2023 10:15
Изменено 30.04.2023 10:21 kov_serg
Re[21]: Когда это наконец станет defined behavior?
Здравствуйте, Евгений Музыченко, Вы писали:
TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!
ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.
Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.
TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!
ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.
Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.
Re[21]: Когда это наконец станет defined behavior?
Здравствуйте, Евгений Музыченко, Вы писали:
TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!
ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.
Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.
ps: на x86 можно вполне использовать диапазон памяти который запрещено писать что бы гарантировать const. Например добавлять 2^60 к адресу и мапить туда всю память но в ro режиме. Всё равно физическая шина <=48бит.
Тогда при попытке записи в const либо ловим где и либо фиксируем и игнорируем либо фиксируем и выходим. Почему так не делают не понятно.
TB>>Типа передали константную ссылку — значит компилятор вправе предполагать что содержимое не меняется!
ЕМ>Если объект создается константным — вправе, и вполне себе предполагает (например, если объект статический, и есть возможность разместить его в RO-секции). А если откуда-то просто приходит ссылка на уже существующий объект, то весь смысл const заключается лишь в запрете его изменения через данную ссылку.
Просто const тут многозначный атрибут и в разных ситуациях его трактуют по разному. Именно отсюда все беды. Объект который не меняется никогда это одно, объект не меняется пока вам его выдали другое, вам выдали копию и можете делать что хотите объёкт не пострадает третье, а вам рекомендуют не менять его это четвёртое.
ps: на x86 можно вполне использовать диапазон памяти который запрещено писать что бы гарантировать const. Например добавлять 2^60 к адресу и мапить туда всю память но в ro режиме. Всё равно физическая шина <=48бит.
Тогда при попытке записи в const либо ловим где и либо фиксируем и игнорируем либо фиксируем и выходим. Почему так не делают не понятно.