![](/img/trans.png)
[英]Is vector.push_back(vector.back()+1) undefined behavior?
[英]Weird behavior of reference to vector.back() after vector is modified
讓我們從C ++中的示例代碼開始:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> vec;
vec.push_back(0);
for (int i = 1; i < 5; i++)
{
const auto &x = vec.back();
std::cout << "Before: " << x << ", ";
vec.push_back(i);
std::cout << "After: " << x << std::endl;
}
return 0;
}
代碼用g++ test.cc -std=c++11 -O0
編譯,結果如下:
Before: 0, After: 0
Before: 1, After: 0
Before: 2, After: 2
Before: 3, After: 3
我期待第二行輸出
Before: 1, After: 1
因為x
是對向量中的項的引用,不應通過將項附加到向量來修改該項。
但是我現在還沒有閱讀反匯編代碼或進行任何其他調查。 此外,我不知道這是否是語言標准中的未定義行為。
我想要解釋一下。 謝謝。
vector
迭代器(以及對元素的先前引用)可能會失效。 使用它們是不安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.