std :: vector的前端地址是否不变?

时间:2018-07-25 19:34:02

标签: c++ vector stdmove

在以下代码段中:

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

1 个答案:

答案 0 :(得分:22)

来自cppreference.com

  

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

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