Получение одного и того же значения переменной const даже после его изменения с помощью const_cast
Рассмотрим приведенный ниже фрагмент кода:
int main()
{
const int i=3;
int *ptr;
ptr=const_cast<int*>(&i);
*ptr=5;
cout<<"i= "<<i<<endl; <------------------- statement 1
cout<<"*ptr= "<<*ptr<<endl; <------------- statement 2
return 0;
}
Я получаю вывод как:
i= 3
*ptr= 5
Почему ценностьi
не меняется через указатель?
Я знаю, что отбрасывание константности переменной, которая явно объявлена как const, и изменение ее значения - это «неопределенное поведение». Мне любопытно узнать: это какой-нибудь механизм оптимизации компилятора, который "компилятор заменяет переменную в программе значением"? Это означает, что оператор 1 интерпретируется компилятором как:
cout<<"i= "<<3<<endl;
Даже если заявление
ptr=const_cast<int*>(&i);
заменяется
ptr=(int*)(&i);
Я получаю тот же вывод:http://ideone.com/5lzJA