c++ - 如何在具有非常量指针键的映射中通过常量指针键查找

标签 c++ stl const-correctness const-cast const-pointer

以下 C++ 代码无法编译,因为它传递了一个指向 find() 的非常量指针。需要一个 const 指针的函数。

#include <map>

std::map<int*, double> mymap;

double myfind(const int * mykey)
{
    return mymap.find(mykey)->second;
}

有没有办法在不改变 map 类型或创建变量的情况下进行查找工作 mykey非常量?
毕竟功能find()不修改指向的对象,它只是比较指针。

最佳答案

映射中的键在语义上是不可变的,所有允许直接访问键的映射操作都是通过 const 实现的。 - 限定 key 类型(例如 value_type 被定义为 pair<const Key, T> )。

如果是 int*键类型但是你会得到一个 const指向非常量的指针 int ( int*const ),这不是很好(它仍然有效,因为只有指针值用作键,但不变性的语义被稀释,这可能导致错误)。

不要抛弃常量,只需更改 mapmap<const int*, double> .

然后它适用于 const int*以及 int*键。

#include <map>

std::map<const int*, double> mymap;

double myfind(const int * mykey)
{
    return mymap.find(mykey)->second; // just works
}

double myfind(int * mykey)
{
    return mymap.find(mykey)->second; // also works
}

关于c++ - 如何在具有非常量指针键的映射中通过常量指针键查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588319/

相关文章:

c++ - c\c++ 中存储 COM 的 VT_DECIMAL 的正确类型是什么?

c++ - 常量数据成员

c++ - 当我调用它两次时,set_union 得到了错误的结果

c++ - std::sort 函数给出 "Bus error: 10"

C 包装类中的 C++ Const 正确性

c++ - 如何访问外部库和头文件 VC10

c++ - 为什么我的 C++ 链接器仅在删除 boost 共享目标文件后才起作用?

c++ - C++ 中的关联键到键映射

c++ - 为什么我的返回类型没有意义?

c++ - 将基本(非指针)参数设为 const 是否有意义?