【发布时间】:2016-09-04 05:16:48
【问题描述】:
有什么好的方法可以避免下面的const_cast,同时保持 const 的正确性?
如果没有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<int*>(ptr)) != std::cend(m_set);? -
糟糕,已修复。谢谢
-
std::find可以提供帮助。我想知道他们是否曾经部分专门化它以在std::set边界上以对数时间运行。
标签: c++ set constants const-cast