【发布时间】:2016-05-24 16:15:31
【问题描述】:
我正在尝试对一些旧的 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:“const_cast”:无法从 'vector::const_iterator' 到 'vector::iterator'
发生了什么变化?这是图书馆的变化吗? C++ 版本更改?
【问题讨论】:
-
可能是在 Visual C++ 6.0 中,
vector<T>::iterator被定义为T*(这是允许的,但不是必须的),而vector<T>::const_iterator被定义为T const*(这是允许的,但不是必须的)。
标签: c++ visual-studio visual-c++ iterator constants