为什么const_cast<iterator>(const_iterator)在Visual C++ 6.0中有效,而在Visual Studio .NET中不起作用?
Why does const_cast<iterator>(const_iterator) work in Visual C++ 6.0, but not in Visual Studio .NET?
我正在尝试使一些旧的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":无法从 "矢量::const_iterator"到"矢量::迭代器"
发生了哪些变化?是库更改吗?C++版本更改?
由于const_cast<T>
在这里列出的四种特定情况下是允许的,因此您通常无法转换
vector<T>::const_iterator
自
vector<T>::iterator
除非源和目标类型是指针或类型,仅在 CV 资格方面有所不同。
由于vector<T>::const_iterator
不能定义为const vector<T>::iterator
,因为vector<T>::const_iterator
需要保持可更改性,因此唯一合理的解释是,vector<T>::const_iterator
和 vector<T>::iterator
都是在 Visual C++ 6.0 库中作为指针进行类型定义的,但 Visual Studio .NET 附带的库已更改。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual C++ constexpr Hints
- 为什么它不适用于Visual 2019的原因
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- visual在c++中将十进制数转换为二进制数
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual C++(VS2017)中用户定义的转换不明确
- Visual C++GC接口如何启用它以及要包含哪个库
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- visual c++,如何获取解决方案目录中的代码
- Visual accept std::string from std::byte iterator
- 为什么const_cast<iterator>(const_iterator)在Visual C++ 6.0中有效,而在Visual Studio .NET中不起作用?