看来我并不完全理解 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
之后完成后, vector 元素都没有增加?
又在哪里ref
指从这一刻起?
最佳答案
开始时,ref
引用test
存储的第三个元素。推回新元素后,vector
重新分配了其存储空间,因此旧的 ref
元素不再有效。您的代码会导致未定义的行为。
关于c++ - 没有通过引用看到对 vector 最后一个元素的操作的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073526/