引用迭代器未在visualstudio2017中编译



在Visual studio 2015中的Visual c++项目中,我使用了对迭代器的引用。

我今天更新到了vs2017,但编译器的变化似乎比我想象的要大。希望我能解决大多数问题,但有些问题我不知道为什么会改变。

例如,我使用了片段

for (auto& it = stack.begin(); it != stack.end() /* not hoisted */; /* no increment */)
{
if (it->second->empty()) { stack.erase(it++); }    // or "it = m.erase(it)" since C++11
else
{
auto obj = move(it->second);
stack.erase(it);
return move(obj);
}
}

其中CCD_ 1是CCD_。

它以前工作得很好,但在vs2017中没有编译,而是产生类型错误

Error   C2440   'initializing': cannot convert from 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' to 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>> &'.

我该怎么办,或者我该去哪里看看,以了解发生了什么变化?在谷歌上搜索一些术语并没有给出任何具体的答案

提前感谢

对右值的非常量引用无效。有关主题的更多信息,请参阅此:

默认情况下,编译器不能将非常量或易失性左值引用绑定到右值。

这里最理想的解决方案是删除&,因为复制迭代器很便宜。

最新更新