Неопределенное поведение для изменения первоначально заявленных данных const
, а содержимое списка инициализаторов всегда равно const
.
В этом случае, похоже, что содержимое списка хранится на странице только для чтения или что-то похожее, и вы получаете ошибку времени выполнения. Вам повезло: с неопределенным поведением ничего может случиться.
Другой классический пример неопределенного поведения, вызванного записью в const, - это когда вы что-то изменяете в одной строке, а на следующей строке вы его читаете, а модификации не отображаются. Это происходит из-за того, что компилятор может предположить, что любые const-объявленные (не указанные) данные не изменят, поэтому он может оптимизировать свой код, чтобы предположить, что начальное значение - это значение, которое оно всегда имеет.
Других возможности, компиляторы на самом деле сделать это компилятор заметили, что вы делаете неопределенное поведение на ветке, рассуждение о том, что отрасль не может быть принята логически, выводя, что условие, чтобы войти в отрасль должна быть другими настройками и устранение ветвь полностью (и/или входит в ветвь, предпосылки которой доказаны указанной логикой). Неопределенное поведение может путешествовать во времени.
Ваш жесткий диск может быть отформатирован, компьютер может взорваться, он отправит вашу историю веб-поиска родителям: компилятор может сделать код в любом случае по любой причине или без причины.
Не выполняйте неопределенное поведение.
'auto a2 = a1;' никогда не будет ссылкой, только копией. Если вам нужна ссылка, вам нужно быть явным, как в 'auto & a2 = a1;' –
. Вы выполнили 'const_cast', затем мутацию на кастинге, и вы хотите узнать, есть ли у вашей программы какие-либо небезопасные операции? –