std::vector::data() 重新分配安全吗?

Is std::vector::data() reallocation-safe?

据我所知,使用指针或引用 std::vector 元素被认为是不好的做法。但是 std::vector::data() 呢? data()占用的指针在重新分配后是否仍然有效?

As far as I know, taking a pointer or reference to std::vector element considered as bad practice.

引用和指针可以避免复制开销,如果您可以确保 std::vector 在引用或指针的生命周期内不会被重新分配,这不是一个坏习惯。

(顺便说一句,在C++中,可以使用引用的时候不需要使用指针)

But what about std::vector::data()? Does the pointer taken by data() remain valid after reallocation?

没有。重新分配可能会导致指针发生变化。在重新分配后使用旧指针是未定义的行为。迭代器也一样。