gpt4 book ai didi

c++ - 调用 std::set::find 时避免 const_cast

转载 作者:可可西里 更新时间:2023-11-01 16:14:27 26 4
gpt4 key购买 nike

有什么好的方法可以避免下面的 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();
}
};

最佳答案

在 C++14 中,您可以使用自己的比较器,将 int const* 声明为透明。这将启用 template overload find() 可以将键与任意类型进行比较。看到这个相关SO question .这是Jonathan Wakely's explanation .

关于c++ - 调用 std::set<Type*>::find 时避免 const_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com