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.