如何延长函数内局部变量的生命周期?
How comes the lifetime of a local variable inside a function be extended?
查看下面的代码。 v1 是函数内部的局部变量。因此,离开这个函数后,这个变量应该被杀死。因此,移动构造函数应该 运行 进入主函数中的问题。但实际上结果恰恰相反。在main函数中,可以看到v1.
的内容
#include <iostream>
#include <vector>
using namespace std;
void my_fn(vector<vector<int>> & v) {
vector<int> v1 = {1, 2, 3};
v.push_back(move(v1));
cout << " " << endl;
}
int main(){
vector<vector<int>> v;
my_fn(v);
for(const auto & e:v)
for (const auto e1: e)
cout << e1 << endl;
return 0;
}
当您将 v1
的内容移动到 v
时,v1
尚未被销毁,因为这恰好发生在函数 my_fn
的右括号之前。结果,v1
的内容被推入 v
中,后者被引用。 v1
的范围没有扩展,只是复制了它的内容。
查看下面的代码。 v1 是函数内部的局部变量。因此,离开这个函数后,这个变量应该被杀死。因此,移动构造函数应该 运行 进入主函数中的问题。但实际上结果恰恰相反。在main函数中,可以看到v1.
的内容#include <iostream>
#include <vector>
using namespace std;
void my_fn(vector<vector<int>> & v) {
vector<int> v1 = {1, 2, 3};
v.push_back(move(v1));
cout << " " << endl;
}
int main(){
vector<vector<int>> v;
my_fn(v);
for(const auto & e:v)
for (const auto e1: e)
cout << e1 << endl;
return 0;
}
当您将 v1
的内容移动到 v
时,v1
尚未被销毁,因为这恰好发生在函数 my_fn
的右括号之前。结果,v1
的内容被推入 v
中,后者被引用。 v1
的范围没有扩展,只是复制了它的内容。