Rachus: Wann ist ein const_cast angebracht?

Beitrag lesen

Und das ist es glaube ich auch, was du die ganze Zeit beschrieben hast?!

du hast einen const Key in der Funktion key_exists
brauchst dort aber einen Key* const, weil data.find diesen erwartet
bekommst aber ohne einen const_cast damit nur einen const Key* const

hmmm, warum ist dein Key in data denn überhaupt ein Pointer? Ich würde eher das ändern.
Du willst ja auh nicht den Pointer hashen, sondern den Inhalt.

Es könnte sein, dass ich gerade etwas wieder ziemlich verwechsel (also bitte verbessern, wenn ich falsch liege). Aber eigentlich war es doch so, dass man die consts von rechts nach links lesen kann. Dann gäbe es:
1. Key* const
2. Key const* (aka const Key*)

Bei 1. ist der Zeiger konstant. Also wird er immer auf die gleiche Speicherstelle zeigen, aber deren Inhalt kann beliebig geändert werden (ist nicht const).
Bei 2. ist die Speicherstelle konstant, aber es kann beliebig geändert werden, welche Speicherstelle.

key_exists bekommt nun eine Referenz. Diese ist konstant (also ist die Speicherstelle konstant). find bekommt eine Referenz des Zeigers, also ist in find der Zeiger konstant, die Speicherstelle aber theoretisch nicht mehr, oder? Genau das würde ja durch den const_cast behoben.

Der Key ist ein Pointer, da ich die Schlüssel ja in der std::list<Key> speichern wollte und nur noch Zeiger auf die eigentlichen Schlüssel der Hashmap geben wollte. Daher musste ich ja auch Hasher und Equaler schreiben - damit eben die gespeicherten Zeiger dereferenziert und nicht die Zeiger verglichen werden.

Ist das jetzt soweit richtig, oder habe ich dann irgendetwas übersehen?

Grüße,

Rachus