Ein legitimes Verwenden Sie (meiner Meinung nach) mit std::set
Iteratoren. Sie sind immer const
, um das Ändern des im Satz verwendeten Schlüssels zu verhindern. Das Ändern des Schlüssels würde die interne Struktur des Satzes zerstören und zu undefiniertem Verhalten führen.
Solange jedoch der Schlüssel nicht geändert wird, ist es sicher, andere Daten im Objekt zu ändern.
Angenommen, Sie haben einen std::set
wie dieses:
std::set<MyObject> some_set;
Und eine Klasse wie folgt aus:
class MyObject {
public:
MyObject(const std::string &key)
: key_(key) {}
bool operator<(const MyObject &other) const {
return key_ < other.key_;
}
private:
// ...
// <some other data>
// ...
const std::string key_;
};
In dem obigen Beispiel der Schlüssel ist bereits const, also auch wenn Sie Ändern Sie das Objekt, Sie können die interne Struktur des Satzes nicht brechen.
Normalerweise kann man nur erhalten eine const
Referenz aus einem Satz Iterator:
const MyObject &object = *some_set_iterator;
Aber da der Schlüssel const
ist, dann ist es sicher const_cast
die dereferenzierte Iterator:
MyObject &object = const_cast<MyObject &>(*some_set_iterator);
Ich habe gerade etwas Großartiges gelernt! Vielen Dank ! – ereOn
ich auch, +1, danke! – Sanish