我正在尝试使一些旧的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 ++版本更改?
答案 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_iterator
和vector<T>::iterator
都是typedef -ed作为Visual C ++ 6.0库中的指针,但Visual Studio .NET附带的库已更改。