Gibt es eine gute Möglichkeit, um die const_cast
unten zu vermeiden, während const Richtigkeit zu halten?Vermeiden von const_cast beim Aufruf von std :: set <Type*> :: finden
Ohne const_cast
wird der folgende Code nicht kompiliert. set::find
erhält einen konstanten Verweis auf den Schlüsseltyp des Satzes, in unserem Fall garantiert es also, den übergebenen Zeigerwert nicht zu ändern; Es ist jedoch nichts garantiert, nicht zu ändern, worauf der Zeiger zeigt.
class C {
public:
std::set<int*> m_set;
bool isPtrInSet(const int* ptr) const
{
return m_set.find(const_cast<int*>(ptr)) != m_set.end();
}
};
Sie geben einen Iterator in einer Funktion zurück, die einen 'bool' zurückgibt, dieser Code wird zur Zeit nicht kompiliert. Möchten Sie 'return m_set.find (const_cast (ptr)) 'verwenden? = Std :: cend (m_set);'? –
user2296177
Whoops, behoben. Danke – Danra
'std :: find' könnte helfen. Ich frage mich, ob sie es jemals teilweise spezialisieren, um in logarithmischer Zeit auf 'std :: set'-Grenzen zu laufen. – bipll