std::vector的前置地址移动是否不变?

18
在下面的代码片段中:
std::vector<double> a(100, 4.2);
auto* a_ptr = a.data();

auto b = std::move(a);
auto* b_ptr = b.data();

std::cout << ((b_ptr == a_ptr) ? "TRUE" : "FALSE") << '\n';

C++标准是否保证在std::moveb_ptr始终等于a_ptr? 在wandbox上运行代码将打印TRUE

1个回答

22

来自cppreference.com

在容器移动构造(重载(6))之后,对其他容器的引用、指针和迭代器(除结束迭代器外)仍然有效,但是它们现在指向的元素位于*this中。当前标准通过§23.2.1 [container.requirements.general] / 12的概括陈述保证了这一点,通过LWG 2321可以更直接地保证这一点。

元素的指针不会失效,包括第一个元素的指针。


哦,std::vector 的末尾迭代器没有额外的保证吗? - Deduplicator
2
我认为应该是 cppreference,而不是 cccpreference。后者应该是给前苏联的粉丝们的 ;) - nneonneo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接