这是我正在使用的代码的简化版本:
namespace BasketNovel {
void Engine::BuryEntities()
{
std::list<Entity*>::iterator iter = p_entities.begin();
while (iter != p_entities.end())
{
if ( (*iter)->getAlive() == false )
{
delete (*iter);
iter = p_entities.erase( iter ); //.erase returns next element
}
else iter++;
}
}
}
我收到来自英特尔静态分析的以下警告:
BasketNovel.cpp(567):警告 #12221:在调用“std::_List_iterator > > std::list >::erase(std::_List_const_iterator > >)”时,对象“iter”的切片作为实际参数 2 传递由于隐式类型转换
我相信这基本上是说我正在导致隐式类型转换:
iter = p_entities.erase(iter);
(注意:即使我将代码更改为: p_entities.erase(iter++); 也会收到相同的警告)
我不太明白我在上面“切片”的是什么。这到底是什么意思,我应该如何解决这个警告?我宁愿稍微复杂的代码也不愿完全关闭警告消息。