矢量的第一个元素的地址是固定的吗?

Xav*_*ier 1 c++ pointers stl vector

例如,如果我做这样的事情:

vector<int> myvector;
myvector.push_back(100);
int * ptr = &(myvector[0]);
myvector.clear();
myvector.push_back(10);
Run Code Online (Sandbox Code Playgroud)

ptr仍然有效吗?或者它现在可能指向垃圾?

fre*_*low 7

23.2.3§4说:

a.clear()[...] 使引用元素的所有引用,指针和迭代器a无效,并且可能使过去的迭代器无效.

由于没有"un-invalidation"这样的东西,因此使用ptrafter后会clear产生未定义的行为.

另一方面,&(myvector[0])不需要括号.Postfix运算符总是比C++中的前缀运算符具有更高的优先级,因此写入&myvector[0]很好.