const Zeiger
-
Hallo, warum funktioniert das nicht? ptr ist doch gar nicht const, aber Compiler meckert trotzdem:
#include <iostream> using namespace std; int main() { const int a = 5, *ptr = &a; int b = 9; ptr = &b; *ptr = 10; cout << b; return 0; }
-
ptr ist Zeiger auf const.
-
ab Zeile 8 aber nicht mehr.
-
Zeiger schrieb:
ab Zeile 8 aber nicht mehr.
Doch. du änderst den Typ des Zeigers nicht dadurch, dass du ihn auf etwas anderes zeigen lässt. ptr ist immer noch vom Typ "Zeiger auf const int". Dies ist natürlich kompatibel damit ihn auf einen int zeigen zu lassen, aber dennoch ist der dereferenzierte Zeiger ein const int. Mit const_cast kannst du dem Compiler beibringen, dass du weißt was du tust (und hoffentlich tust du das wirklich!) und das const ignoriert werden soll.
int main() { const int a = 5, *ptr = &a; int b = 9; ptr = &b; *const_cast<int*>(ptr) = 10; // Geht. cout << b; // 10 ptr = &a; *const_cast<int*>(ptr) = 10; // Hier passiert wer weiß was cout << a; // Irgendwas return 0; }