在以下代码段中:
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
after std::move
?在wandbox打印上运行代码TRUE
。
在容器移动构造(重载(6))之后,指向 other 的引用、指针和迭代器(除了结束迭代器)仍然有效,但引用现在在 *this 中的元素。当前标准通过 §23.2.1[container.requirements.general]/12 中的一揽子声明做出此保证,并且正在考虑通过LWG 2321提供更直接的保证。
指向元素的指针不会失效,包括指向第一个元素的指针。