Whouzuo: Wann ist ein const_cast angebracht?

Beitrag lesen

Kurz vorweg: ich habe keine C++ Erfahrung.

Mein Anliegen ist eine C++-Klasse, die ich zum Wrappen der std::unordered_multimap nutzen wollte. Dabei wollte ich die Schlüssel nicht direkt in der Tabelle speichern, sondern nur einen Pointer.

Erste Frage, warum?

Der Schlüssel selbst liegt in einer anderen Datenstruktur (einer std::list; damit wird bei mehreren Werten eines Schlüssels der Schlüssel trotzdem garantiert nur einmal gespeichert). Nun sieht eine Funktion beispielsweise so aus (ist hoffentlich selbsterklärend):

template<class Key, class Value, class Hash, class Equals>
inline const bool
UM_Wrapper<Key, Value, Hash, Equals>::key_exists(const Key& key) const
{
return data.find(&key) != data.end();
}

Kannst du das vielleicht mal wörtlich beschreiben? Die Syntax finde ich als Java Gewöhnter nicht so intuitiv. Also: was hast du für Datenstrukturen und für Klassen und wer soll was warum womit machen.

Leider liest man aber im Internet viel zu häufig, dass const_cast (genauso, wie reinterpret_cast)

Generell sind casts böse. Nämlich deshalb, weil dadurch Fehler nur noch zur Laufzeit festgestellt werden können; das bedeutet, die Verantwortung verlagert sich vom Compiler auf dich - und das willst du nicht.