如何在 C++ 中通过引用返回向量
Posted
技术标签:
【中文标题】如何在 C++ 中通过引用返回向量【英文标题】:How can I return vector by reference in C++ 【发布时间】:2020-06-18 19:28:04 【问题描述】:我想创建一个通过引用返回向量的函数。但是返回的向量(returned_v
)与vec.v
不同,而是一个复制的向量。这意味着向量是按值返回的。如何从vector_reference()
获取引用向量?
class Vec
public:
std::vector<int> v = 1, 2, 3;
std::vector<int>& vector_reference()
return v;
;
int main()
Vec vec;
std::vector<int> returned_v = vec.vector_reference();
returned_v.clear();
std::cout << returned_v.size() << std::endl; // result: 0
std::cout << vec.v.size() << std::endl; // result: 3
return 0;
【问题讨论】:
除了解决手头的问题,还有什么目的?培训? 代码是简化版,让问题更清楚。 vector_reference() 用于根据实例的状态返回成员向量之一。 好的。我没有得到问题描述。 【参考方案1】:returned_v
是从vec.vector_reference()
的返回值复制而来的独立对象。您也应该将其声明为参考。
std::vector<int>& returned_v = vec.vector_reference();
【讨论】:
【参考方案2】:函数vector_reference()
中的引用是vec.v
的引用。但是,returned_v
是 vec.v
的副本,而不是它的引用。有两种方法可以帮助您:
std::vector<int>& returned_v = vec.vector_reference();
std::vector<int> returned_v = std::move(vec.vector_reference()); //C++ 11
【讨论】:
请注意,在 #1 中,returned_v
是 vec.v
本身的别名,而在 #2 中,returned_v
是一个单独的对象,它窃取了 vec.v
数据的所有权。微妙但重要的区别。以上是关于如何在 C++ 中通过引用返回向量的主要内容,如果未能解决你的问题,请参考以下文章