【问题标题】:Difference between two ways of returning a vector in C++ by a function函数在 C++ 中返回向量的两种方式之间的区别
【发布时间】:2021-09-14 05:18:25
【问题描述】:

给定以下函数,即 params() 和 mutable_params():

std::vector<int> params_;

std::vector<int>& params() {
return params_;
}
std::vector<int>* mutable_params() {
return &params_;
}

以下表达式中vec1和vec2有什么区别:

std::vector<int> vec1=params();
std::vector<int> vec2=mutable_params();

【问题讨论】:

  • 嗯,一个区别是vec2 行不会编译。
  • std::vector&lt;int&gt; vec2=mutable_params() 无法编译,您可能需要std::vector&lt;int&gt; vec2=*mutable_params()
  • 这2种方式允许对向量进行变异,所以命名是错误的......ByRef/ByPointer会更合适。

标签: c++ pointers reference stdvector


【解决方案1】:

vec2 不会编译。如果你把它改成std::vector&lt;int&gt;* vec2=mutable_params();,那么它会编译。

这两个函数的区别在于params()返回一个向量的引用,而mutable_params()返回一个指向向量的指针但两者都是可变的

一个更有趣的例子是这两个变量之间的区别:

std::vector<int> v_copy = params();
std::vector<int>& v_ref = params();

在这种情况下,v_copy复制整个向量,而v_ref 是对原始向量的引用,因此您可以更改原始向量。

如果您希望params() 函数返回非可变引用,则必须将其声明更改为const std::vector&lt;int&gt;&amp; params();

【讨论】:

  • 谢谢。那么这两个函数之间有什么区别: std::vector& params1() { return params_; } 和 std::vector params2() { return params_; }
  • @JohnBM std::vector&lt;int&gt;&amp; params1() 返回对向量的(可变)引用,而 std::vector&lt;int&gt; params2() 返回向量的副本。
猜你喜欢
  • 2014-08-17
  • 2016-11-29
  • 2011-09-29
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多