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

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

ptr仍然有效吗?还是现在可能指向垃圾?

最佳答案

23.2.3§4说:



由于没有“取消无效”之类的内容,因此在ptr之后使用clear会导致未定义的行为。

附带说明,不需要&(myvector[0])中的括号。在C++中,后缀运算符始终比前缀运算符具有更高的优先级,因此编写&myvector[0]很好。

关于c++ - vector 的第一个元素的地址是否固定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9046946/

10-13 06:59