C++函数可以返回Vector局部变量问题
- 函数返回的Vector是右值。
- 接收右值会调用移动构造函数。移动构造函数将栈中数据的所有权转移到函数外了。
Vector存放在栈区,函数返回的Vector是右值,接收右值会调用移动语义,移动语义会修改对象所有权。
因此栈内的数据没有随着函数结束被销毁,而是所有权发生了变更。
更多移动语义相关介绍,可以看本人的文章。三、精通类与对象
在下面的例子中,因为只是修改对象所有权,所以两个vec[0]
的地址是相同的。
#include <iostream>
#include <vector>
using namespace std;
// 返回一个vector变量,并打印vec的地址和存放在容器中第一个数据的首地址
vector<int> fun() {
vector<int> vec; // 创建vector
vec.push_back(10); // 添加一个元素
cout << "fun():&vec" << &vec << endl;
cout << "fun():&vec[0]" << &vec[0] << endl;
return vec; // 返回vector
}
int main() {
vector<int> vec; // 创建一个vector
vec = fun(); // 接收传来的参数
cout << "----------------------" <<endl;
cout << "main():&vec" << &vec << endl;
cout << "main():&vec[0]" << &vec[0] << endl;
system("pause");
return 0;
}
如有陈述纰漏,还望前辈不吝指教。