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++ 标准是否保证b_ptr总是等于a_ptrafter std::move在wandbox打印上运行代码TRUE

4

1 回答 1

22

来自cppreference.com

在容器移动构造(重载(6))之后,指向 other 的引用、指针和迭代器(除了结束迭代器)仍然有效,但引用现在在 *this 中的元素。当前标准通过 §23.2.1[container.requirements.general]/12 中的一揽子声明做出此保证,并且正在考虑通过LWG 2321提供更直接的保证。

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

于 2018-07-25T19:37:21.767 回答