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.


  • Mod

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

Anmelden zum Antworten