Ich bin ein wenig verwirrt, was in den folgenden Code passiert:eine const durch einen nicht konstanten Zeiger Ändern
const int e = 2;
int* w = (int*) &e; // (1) cast to remove const-ness
*w = 5; // (2)
cout << *w << endl; // (3) outputs 5
cout << e << endl; // (4) outputs 2
cout << "w = " << w << endl; // (5) w points to the address of e
cout << "&e = " << &e << endl;
In (1), w zeigt auf die Adresse von e. In (2) wurde dieser Wert auf 5 geändert. Wenn jedoch die Werte von * w und e angezeigt wurden, sind ihre Werte unterschiedlich. Aber wenn Sie den Wert von w Zeiger und & e drucken, haben sie den gleichen Wert/Adresse.
Wie kommt e noch 2 enthalten ist, auch wenn es bis zu 5 geändert wurde? Wurden sie an einem anderen Ort aufbewahrt? Oder ein temporäres? Aber warum ist der Wert von w immer noch die Adresse von e?
Sie sind in undefiniert Verhalten Land - alles kann passieren. –
Mein Verstand ist zu müde, um zu sehen, was passiert, aber Sie können const_cast dafür verwenden. Wenn Sie gefragt werden, was gerade passiert, können Sie diesen Kommentar ignorieren. – erelender
@erelender: Sie könnten 'const_cast' dafür verwenden, aber es würde das Verhalten nicht weniger undefiniert machen. –