const_cast so richtig verwendet?
-
Dann hat mein Compiler wohl ein Loch.
-
const_cast verwendet man richtig, indem man es nicht verwendet
-
Wobei das soweit ich weiß undefiniertes Verhalten auslöst.
const_cast sollte nur dann verwendet werden, wenn man sich sicher ist, das sich das Objekt dann dennoch nicht verändern wird.
Also in Fällen wie zum Beispiel, wenn der Programmierer vergisst einen Parameter const zu deklarieren, aber es mit dem const
genauso kompilieren würde.Möge man mich aufklären, wenn ich falsch liege.
Btw. dein Code kompiliert zwar bei mir (g++ 4.0), bricht
aber zur Laufzeit aufgrund eines Speicherfehlers ab.grüße
-
SeppSchrot schrieb:
Hallo,
statt vieler Worte einen kurzen Quelltext.
const bool bc = true; int main() { bool *b1 = const_cast<bool*>(&bc); *b1 = false; return 0; }
Ist das hier zulässig und definiert?
Zulässig ja, definiert nein.
SeppSchrot schrieb:
Dann hat mein Compiler wohl ein Loch.
Das ist bestimmt die Lösung.
Moritz
-
Waldmensch schrieb:
Btw. dein Code kompiliert zwar bei mir (g++ 4.0), bricht
aber zur Laufzeit aufgrund eines Speicherfehlers ab.Ja, bei mir mit Visual C++ bei Win32 oder Konsolenapp. raucht er auch ab.
Bei gcc 3.? läuft es.
Wenn die Variable im Block Scope steht, funktioniert es auch.
-
das problem ist einfach, dass es globale const variablen im endcode nichtmehr unbedingt gibt, der compiler sie also rausoptimiert hat. Das ist dann natürlich sehr böse,wenn man versucht, darauf wieder zuzugreifen
-
otze schrieb:
das problem ist einfach, dass es globale const variablen im endcode nichtmehr unbedingt gibt, der compiler sie also rausoptimiert hat. Das ist dann natürlich sehr böse,wenn man versucht, darauf wieder zuzugreifen
Jo.
Habe auch gerade das Kommentar dazu im Standard gefunden.
Ist tatsächlich undefiniert.Muss ich mir wohl was andres einfallen lassen.
Es geht einfach darum, dass ich eine globale Variable extern const deklariert habe, die nur in der Übersetzungseinheit, in der sie definiert ist, beschrieben werden kann.
-
SeppSchrot schrieb:
Es geht einfach darum, dass ich eine globale Variable extern const deklariert habe, die nur in der Übersetzungseinheit, in der sie definiert ist, beschrieben werden kann.
Für den Fall dass du nicht hören willst wie böse globale Variablen sind, könnte ich dir raten einfach eine Funktion draus zu machen.
-
SeppSchrot schrieb:
Es geht einfach darum, dass ich eine globale Variable extern const deklariert habe, die nur in der Übersetzungseinheit, in der sie definiert ist, beschrieben werden kann.
Und warum machst du sie dann const? Wenn du die Variable an anderer Stelle ändern möchtest, dann ist es auch keine Konstante mehr.
-
SeppSchrot schrieb:
Es geht einfach darum, dass ich eine globale Variable extern const deklariert habe, die nur in der Übersetzungseinheit, in der sie definiert ist, beschrieben werden kann.
wie wärs, wenn du die variable nur dort, wo sie verändert werden soll, deklarierst und sonst eine globale referenz auf const benutzt?