std :: move()是否使迭代器失效?

这个问题在这里已经有了答案:

  • 移动矢量是否使迭代器失效? 4个答案

  • 在http://en.cppreference.com笔记(重点是我的)之后:

    在容器移动赋值(重载(2))之后,除非元素移动赋值由不兼容的分配器强制,否则对其他元素的引用,指针和迭代器 (除了结束迭代器) 仍然有效 ,但引用现在在* this中的元素。 目前的标准通过第23.2.1节[container.requirements.general] / 12中的一揽子声明作出这一保证,并且正在考虑通过LWG 2321

    笔记

    正如hvd指出的那样,至少有一次情况是移动助理被迫使迭代器无效 - 当新的容器具有不兼容的分配器时。

    正如Ben Voigt指出的那样,在这个主题上有更广泛的讨论,它实际上已经涵盖了问题的c ++ 11方面......


    不,他们不应该在移动操作后失效。

    23.3.6.5/1

    插入点之前的所有迭代器和引用都不受影响,除非新的容器大小大于先前的容量(在这种情况下,所有迭代器和引用都将失效)

    链接地址: http://www.djcxy.com/p/94461.html

    上一篇: Does std::move() invalidate iterators?

    下一篇: React Redux dispatch action after another action