在以下代码段中:
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 ++标准是否保证b_ptr
之后a_ptr
始终等于std::move
?在wandbox上运行代码将打印TRUE
。
答案 0 :(得分:22)
在容器移动构造(重载(6))之后,对other的引用,指针和迭代器(最终迭代器除外)仍然有效,但是引用的是* this中的元素。当前标准通过§23.2.1[container.requirements.general] / 12中的一揽子声明来提供此保证,并且正在通过LWG 2321考虑更直接的保证。
指向元素的指针不会无效,包括指向第一个元素的指针。