为什么const_cast <iterator>(const_iterator)在Visual C ++ 6.0中工作,而在Visual Studio .NET中却不起作用?

时间:2016-05-24 16:15:32

标签: c++ visual-studio visual-c++ iterator const

我正在尝试使一些旧的C ++代码现代化。它最初是在Visual C ++ 6.0中构建的。我目前的方法是一次一步地浏览Visual Studio版本,以最大限度地减少每次迭代的代码中断次数。

采用以下示例:

vector<someType>::iterator someFunction(...){
    vector<someType>::const_iterator someConstIterator;
    ...
    return (const_cast<vector<someType>::iterator>(someConstIterator));
}

在Visual C ++ 6.0中,它编译得很好。在Visual Studio .NET中,我收到以下错误:

  

错误C2440:&#39; const_cast&#39;:无法转换   &#39;矢量::为const_iterator&#39; to&#39; vector :: iterator&#39;

发生了什么变化?它是图书馆改变吗? C ++版本更改?

1 个答案:

答案 0 :(得分:3)

由于const_cast<T>在四种特定情况listed here下被允许,因此通常无法转换

vector<T>::const_iterator

vector<T>::iterator

除非源类型和目标类型是仅在cv-qualification中不同的指针或类型。

由于vector<T>::const_iterator无法定义为const vector<T>::iterator,因为vector<T>::const_iterator需要保持可变,唯一合理的解释是vector<T>::const_iteratorvector<T>::iterator都是typedef -ed作为Visual C ++ 6.0库中的指针,但Visual Studio .NET附带的库已更改。