c++ 指向元素的std::move后的迭代器有效性

nwsw7zdq  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(128)

我在标准中找不到任何关于这一点的内容,这是UB还是定义良好的行为?

  1. // Assuming T supports move semantics
  2. void sink(T&& t)
  3. {
  4. // bla bla
  5. }
  6. std::list<T> list = getSomeList();
  7. for (auto it = list.begin(); it != list.end(); )
  8. {
  9. if (some pred)
  10. {
  11. sink(std::move(*it));
  12. it = list.erase(it) // is this valid following the std::move() ??
  13. }
  14. else
  15. ++it;
  16. }
clj7thdc

clj7thdc1#

或更一般地说:对一个指向的元素做任何改变对迭代器没有影响。它将继续有效。
P.S.你的例子实际上并没有脱离元素。它只将右值引用绑定到它。

相关问题