看不到作用在向量上的效果';最后一个元素通过引用 我似乎不完全理解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(); }
为什么在看不到作用在向量上的效果';最后一个元素通过引用 我似乎不完全理解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(); },c++,c++11,reference,C++,C++11,Reference,为什么在push_back完成后,向量元素都不会增加? 从这一刻起,ref指向何处 开始时,ref引用test存储的第三个元素。在推回一个新元素之后,vector重新分配了它的存储,因此旧的ref元素不再有效。如果向量需要重新分配其数据存储,那么所有迭代器、指针和元素引用都将失效。重新分配导致死亡。向量的内容移走了,但引用保留了下来,变得悬而未决。这个问题与lambdas没有任何关系,如果没有它们,你也会得到同样的结果。 inside lambda 3
push_back
完成后,向量元素都不会增加?
从这一刻起,
ref
指向何处 开始时,ref
引用test
存储的第三个元素。在推回一个新元素之后,vector
重新分配了它的存储,因此旧的ref
元素不再有效。如果向量需要重新分配其数据存储,那么所有迭代器、指针和元素引用都将失效。重新分配导致死亡。向量的内容移走了,但引用保留了下来,变得悬而未决。这个问题与lambdas没有任何关系,如果没有它们,你也会得到同样的结果。
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