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仍然有效吗?或者它现在可能指向垃圾?
23.2.3§4说:
a.clear()[...] 使引用元素的所有引用,指针和迭代器a无效,并且可能使过去的迭代器无效.
由于没有"un-invalidation"这样的东西,因此使用ptrafter后会clear产生未定义的行为.
另一方面,&(myvector[0])不需要括号.Postfix运算符总是比C++中的前缀运算符具有更高的优先级,因此写入&myvector[0]很好.