返回 C++ 函数中的引用

returning references in c++ functions

本文关键字:引用 函数 C++ 返回      更新时间:2023-10-16

尽管我认为我支持引用,但我不知道这两者之间是否有区别(两者都有效(:

(includes and that stuff)
//doesn't return a reference to a vector
vector<int> ref_to_vec1(vector<int>& vec) {
  vec.push_back(whatever);
  return vec;
}
//returns a REFERENCE to a vector
vector<int>& ref_to_vec2(vector<int>& vec) {
  vec.push_back(whatever);
  return vec;
}
vector<int> v;
//Both append whatever to v
ref_to_vec1(v);
ref_to_vec2(v);

返回带有函数的引用有什么意义?

在这种情况下,返回任何东西有什么意义?你只需要用向量调用函数,而不给函数的结果分配任何东西。

谢谢!

在这种情况下,返回任何东西有什么意义?你 只需要用向量调用函数,无需赋值 函数结果的任何内容。

无。也许是一个指示失败或成功的bool(这就是 WinAPI 所做的(,但除此之外,如果您在要填充的参数列表中使用引用而不是使用函数的返回值,那么您根本不需要返回任何内容。


返回

引用的目的是避免复制要返回的对象。 ref_to_vec1()复制*返回时传递给它的vec,并保存返回值:

auto v2 = ref_to_vec1(v); // v2 is a copy of v, changing v2 doesn't change v
auto& v3 = ref_to_vec2(v); // v3 is a reference to v, any changes made to v3 are made to v too.

*除非它被 (N(RVO 优化或移动(C++11 或更高版本(。

案例 1 显而易见,正如米哈伊尔所解释

的那样

情况 2 您的函数创建一个新对象并返回对它的引用,或者提供对已实例化内容的访问;例如单例

情况3:你想要链接运营商,通常发生在流媒体运营商身上; myStream <<firstVal <<secondVal;

我很确定这个问题是重复的,并且必须在这个网站上已经有很好的答案

如果不使用 reference,则有第二个向量对象,它从函数返回。

我认为

,混淆的一部分是概念上有两组函数 - 以某种方式处理参数并返回其结果的函数,以及作用于参数的函数。有些语言甚至在语言中内置了这种区别 - 例如,在Pascal中,你有"过程"和"函数"。前者不能返回任何东西,而后者必须返回。

你在你的情况下,是一个程序性的东西——它作用于论点,在你的情况下,添加一个元素。它通常不需要返回任何内容(vector::push_back()永远不会失败(。