Einen konstanten Wert verändern!



  • class Hrhr
    {
        public:
            int getsomething () const
            {
                const_cast<Hrhr&>(*this).dosomething();
                return(m_intern);
            }
    
            void dosomething ()
            {
                m_intern = 5;
            }
    
         private:
             int m_intern;
    };
    

    😮

    MfG SideWinder



  • Hmm, also ich hab diesen Weg noch nicht gekannt. Aber ich hab ja auch nicht behauptet, dass ich es wirklich ernsthaft anwenden würde.



  • C++ bietet eben für jeden etwas. 😉 😃



  • zum Casten dazu braucht man kein C++



  • otze schrieb:

    und NULL ist ein define für 0x000000,also ein einfaches 0, somit ist der anfang des speichers damit gemeint.

    Nö. 0 gibt eine ungülte Adresse an. Kann natürlich auch 0 sein, muss aber nicht.



  • const ist nur ein Spachmittel zur Modellierung von Invarianz, aber kein Sicherheitsmechanismus. Der compiler ist nicht verpflichtet, die unveränderbarkeit zu sichern (es ist ihm aber u.U. erlaubt).

    0 ist eine "nirgendwo"-Adresse, die niemals von einem erfolgreichen new oder Adreßoperator auf einen gültigen lvalue zurückgegeben wird. Die C++ - Repräsentation (also im Quelltext) ist immer eine binäre Null, da ist es egal ob man 0 oder das "übliche" NULL (als #define NULL 0) verwendet.

    Die interne Maschinenrepresäntation darf aber davon abweichen. Deswegen muß an den Stellen, wo der compiler nicht weiß daß man einen 0-Zeiger meint, der Typ explizit bekannt gemacht werden (z.B. bei variabler Argumentliste)



  • SideWinder schrieb:

    const_cast<Hrhr&>(*this).dosomething();
    

    😮

    MfG SideWinder

    es hat nichts mit der Frage zu tun :D, aber ich würde für solche Situazionen, die du beschrieben hast, lieber mutable nutzen.



  • Wenn NULL also nicht den ersten Speicherbereich markiert, worauf zeigt dann Nullzeiger++ ? Ist ein Null-Zeiger ein Zeiger auf eine undefinierte Stelle im Speicher und Nullzeiger++ die Stelle danach?



  • Ist (IIRC) "undefiniert", d.h. der Standard sichert dir überhaupt nix zu.

    Wenn Du's trotzdem machst, hängt es natürlich vom Compiler / Plattform ab.

    (z.B. Wintel: NULL zeigt auf eine Adresse die betriebssystemsabhängig auf physischen Speicehr gemappt ist oder auch nicht, un der "NULL++" halt eins weiter)



  • Wohin ein Zeiger+1 zeigt, ist AFAIK generell nicht definiert, es sei denn, Zeiger zeigt in ein Array hinein.


Anmelden zum Antworten