constの正確さを維持しながら、const_cast
を以下のように取り除く良い方法はありますか?std :: setを呼び出すときにconst_castを避けるset <Type*> :: find
const_cast
を指定しないと、以下のコードはコンパイルされません。 set::find
は、セットのキータイプへのconst参照を取得します。したがって、渡されたポインタ値を変更しないことが保証されます。しかし、ポインタが指しているものを変更しないことについては何も保証していません。
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();
}
};
'bool'を返す関数でイテレータを返していますが、このコードは現在コンパイルされていません。 'return m_set.find(const_cast(ptr))!= std :: cend(m_set);'を使用することを意味しましたか? –
user2296177
ありがとうございました。ありがとう – Danra
'std :: find'が助けになります。私は彼らが 'std :: set'境界で対数的に動作するように部分的に専門化しているのだろうかと思います。 – bipll