我在标准中找不到任何关于这一点的内容,这是UB还是定义良好的行为?
// Assuming T supports move semantics
void sink(T&& t)
{
// bla bla
}
std::list<T> list = getSomeList();
for (auto it = list.begin(); it != list.end(); )
{
if (some pred)
{
sink(std::move(*it));
it = list.erase(it) // is this valid following the std::move() ??
}
else
++it;
}
1条答案
按热度按时间clj7thdc1#
或更一般地说:对一个指向的元素做任何改变对迭代器没有影响。它将继续有效。
P.S.你的例子实际上并没有脱离元素。它只将右值引用绑定到它。