Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
看不到作用在向量上的效果';最后一个元素通过引用 我似乎不完全理解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 - Fatal编程技术网

看不到作用在向量上的效果';最后一个元素通过引用 我似乎不完全理解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