gpt4 book ai didi

c++ - 如何在 std::set 中找到 const int*?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:47 24 4
gpt4 key购买 nike

首先,我有一套

std::set<int*> my_set;

然后,我有一个函数来检查 my_set 中是否存在一个特定的 int 指针 p,它只是返回 true 如果it 指针存在于其中,否则为 false

由于函数不修改被引用的int,所以很自然的把指针当作const int*,即

bool exists_in_my_set(const int* p)
{
return my_set.find(p) != my_set.end();
}

但是,当我尝试编译代码时,出现以下错误:

error: invalid conversion from 'const int*' to 'std::set<int*>::key_type {aka int*}' [-fpermissive]

换句话说,当我调用 find 时,编译器会尝试将 const int* 转换为 int*

无论如何,我的问题是:如何在 my_set 中找到 p,或者至少找出 p 是否存在于my_set 是否使用 pmy_set 的现有定义?

最佳答案

您可以使用 const_cast<>在搜索 set<> 之前从参数中删除常量:

return my_set.find(const_cast<int*>(p)) != my_set.end();

没有特殊的技术原因,库无法支持您的期望,但另一方面 - 强制显式 const_cast正在记录涉及 const 的操作指针以某种方式变得非 const通过 set 访问...可以说是不错的文档,说明出现了一些不寻常的事情。

关于c++ - 如何在 std::set<int*> 中找到 const int*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903550/

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