Uzyskanie tej samej wartości zmiennej const nawet po zmianie przez const_cast

Rozważ poniższy fragment kodu:

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;
}

Otrzymuję dane wyjściowe jako:

i= 3
*ptr= 5

http://ideone.com/Bvme6

Dlaczego wartośći nie jest zmieniany przez wskaźnik?

Wiem, że odrzucenie stałej zmiennej, która jest jawnie zadeklarowana jako stała i modyfikacja jej wartości, to „Niezdefiniowane zachowanie”. Interesuje mnie: Czy to jest jakikolwiek mechanizm optymalizacji kompilatora, który „kompilator zastępuje zmienną w programie wartością” ?. Oznacza to, że instrukcja 1 jest interpretowana przez kompilator jako:

cout<<"i= "<<3<<endl;

Nawet jeśli oświadczenie

ptr=const_cast<int*>(&i);    

zastępuje się

 ptr=(int*)(&i);

Otrzymuję to samo wyjście:http://ideone.com/5lzJA

questionAnswers(5)

yourAnswerToTheQuestion