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