没有通过引用[重复]看到动作对向量的最后一个元素的影响
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有通过引用[重复]看到动作对向量的最后一个元素的影响相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我似乎并不完全理解C ++引用是如何工作的。尝试运行以下代码段:
#include <vector>
#include <iostream>
int main() {
std::vector<int> test{1,2,3};
int& ref = test.back();
auto lambda = [&ref, &test](){
std::cout << "inside lambda " << ref << std::endl;
ref += 1;
for (auto&v : test) { std::cout << v << " "; }
};
lambda(); lambda(); lambda();
test.push_back(5);
lambda(); lambda(); lambda();
}
得到了这个结果:
inside lambda 3
1 2 4
inside lambda 4
1 2 5
inside lambda 5
1 2 6
inside lambda 6
1 2 6 5
inside lambda 7
1 2 6 5
inside lambda 8
1 2 6 5
为什么在完成push_back
后,没有一个向量元素递增?从这一刻起ref
指向哪里?
答案
一开始,ref
引用了test
存储的第三个元素。在推回一个新元素之后,vector
重新分配了它的存储,因此旧的ref
元素不再有效。您的代码会导致未定义的行为。
以上是关于没有通过引用[重复]看到动作对向量的最后一个元素的影响的主要内容,如果未能解决你的问题,请参考以下文章