【问题标题】:Return a reference vs. passing a reference as parameter返回引用与将引用作为参数传递
【发布时间】:2016-11-15 19:41:32
【问题描述】:

与将引用作为参数传递相比,返回引用有哪些优点和缺点。

我有一个类,它有一个成员变量(小代码示例中的“localVariable”),其他类应该通过 get-functions 获取这些成员变量的值。

目前我有以下功能:

在 int localVariable;

int getValue(){
  return localVariable;
}

有人说这很重要,所以使用 const 引用

以下哪个函数是合适的? 每个版本的优缺点是什么?

int localVariable;

int const & getValue(){
 return localVariable;
}

int localVariable;

void const getValue(&refValue){
refValue =  localVariable;
}

我发现了一些类似的东西,但并不完全相同,所以我仍然不清楚在我的情况下什么更好:Returning a pointer vs. passing a reference to an object to store the answer in C++

【问题讨论】:

  • 您的第一个版本显示未定义的行为,请参阅here
  • 请尝试创建一个Minimal, Complete, and Verifiable Example 来说明您的问题和您所询问的代码。例如最后一个示例将无法编译,并且在第一个示例中localVariable 似乎实际上并不是一个局部变量。 value1 是什么?
  • 试试看这个(可能是重复的):stackoverflow.com/questions/12083451/…
  • 如果是第一种情况,我可以写if (getValue() == 5),而不必先创建一个单独的变量来存储值。巨大的优势。
  • @BoPersson 不幸的是,这个第一个版本不起作用。

标签: c++ parameters reference return constants


【解决方案1】:

(第二个不是函数,是方法)。

参考与否,这是一个可读性的例子,所问的问题是更多的功能与方法。函数应返回其主要目标,而不是设置输出参数。通常,函数通常对传入的参数进行操作,并且本质上是算法。

(其实上面的例子看起来像是一个封装的属性)

【讨论】:

  • 什么是“方法”?它和其他任何功能一样。
  • 不,不是,根据定义,函数必须返回值,方法不必。设置输出参数并不(清楚地)表明程序员打算将其作为主要返回值。
  • “函数是一组输入和一组允许输出之间的关系,其属性是每个输入都与一个输出相关。”。 void return 不是函数而是方法(或过程)
【解决方案2】:

按值返回常量/引用或对象的优点是可以在表达式中使用,而使用引用需要一个变量来复制对象。

通常,按值传递/返回用于小对象,如果它们较大,则使用 const/reference。请注意,通过引用传递/返回也有成本。 Weel,由于移动复制/分配,这在 c++11 中发生了变化。

另一方面——你使用了名称“localVariable”——如果你返回一个引用,你必须考虑到返回的变量在调用返回后必须仍然存在。

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2013-09-20
    • 2011-12-16
    • 2020-11-27
    • 2013-08-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多