Den gleichen Wert der const-Variablen erhalten, auch nachdem Sie ihn über const_cast geändert haben
Betrachten Sie das folgende Code-Snippet:
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;
}
Ich erhalte die Ausgabe als:
i= 3
*ptr= 5
Warum ist der Wert voni
wird nicht durch Zeiger geändert?
Ich weiß, dass das Wegwerfen der Konstanz einer Variablen, die explizit als const deklariert ist, und das Ändern ihres Werts 'Undefiniertes Verhalten' ist. Ich bin neugierig zu wissen: Ersetzt ein Compiler-Optimierungsmechanismus die Variable im Programm durch den Wert? Dies bedeutet, dass die Anweisung 1 vom Compiler interpretiert wird als:
cout<<"i= "<<3<<endl;
Auch wenn die Aussage
ptr=const_cast<int*>(&i);
wird ersetzt durch
ptr=(int*)(&i);
Ich erhalte die gleiche Ausgabe:http://ideone.com/5lzJA