是否可以将一对<Key,Value>转换为一对<const Key,Value>?

mas*_*ers 5 c++ stl const const-cast std-pair

所以我有一个模拟地图const_iterator的智能迭代器,它需要在内部构建返回类型.显然,我想pair<Key, Value>在我的迭代器类中存储一个(因为我需要修改它),但同时我希望dereference函数呈现一个pair<const Key, Value>(实际上它将分别是一个const pair<const Key, Value>&const pair<const Key, Value>*).到目前为止,我提出的唯一解决方案是每次更改迭代器类指向更改的值时动态分配一个新对.毋庸置疑,这不是一个好的解决方案.

我也尝试过*const_cast<const pair<const Key, Value> >(&value)在哪里value声明pair<Key, Value>.

任何帮助将不胜感激(因为它不能做到的知识).

编辑

对于好奇:我最终pair<const Key, Value> p在我的迭代器类中存储了一个.为了更改对,我根据底层迭代器(map<Key, Value>::const_iterator it)分别更改了两个元素,const_cast使键可以被更改,如下所示:

*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
Run Code Online (Sandbox Code Playgroud)

不是我非常满意的解决方案,但它完成了工作,并且取消引用方法很高兴,因为我存储的是正确类型的东西,他们可以参考.

Mik*_*our 8

您可以将类型的转换pair<Key,Value>pair<const Key,Value>.

然而,仔细阅读的问题,你实际上是给予了询问,pair<Key,Value>您可以创建一个指针引用pair<const Key,Value>引用同一个对象.

答案是否定的 - 对于一种类型的引用或指针可以引用不同类型的对象的唯一情况是对象类型是否继承自引用的类型.

一种可能性是返回一对引用,pair<const Key&, Value&>从您想要引用的对中创建.


Ker*_* SB 5

是.

std::pair<int, double> p(1,2);
std::pair<const int, double> q = p;   // no problem

//q.first = 8;  // error
q.second = 9;

int b; double d;
std::pair<int &, double &> s(b,d);
std::pair<int const &, double &> t = s;  // also fine
Run Code Online (Sandbox Code Playgroud)