函数返回值与通过引用传递的修改值

时间:2014-10-04 14:04:23

标签: c++ return-value pass-by-reference choice

在什么情况下,首选返回一个对象而不是仅修改通过引用传递给该函数的对象?我怎么知道应该选哪一个?

实际上,问题是如果没有从函数返回对象的能力我将无法做到的事情,而只是修改通过引用传递的对象。

4 个答案:

答案 0 :(得分:4)

之间的主要语用差异
 TYPE function () ;

 void function (TYPE &value) ;

是前者可以用在表达式中。

a = 10 * function () ;

if(function())    {    }

这是主要的设计考虑因素。

除此之外,我必须得到意见。我将坚持客观的差异。

答案 1 :(得分:2)

非常简单......

返回"值": - 如果您想要对象的副本以及对象的当前状态; - 如果原始对象的状态改变后者,则非常重要;

以参考方式返回: - 如果您希望在其他人更新对象时拥有正确的状态; - 如果要更改对象的状态,其他人知道该更改;

这些是最重要的原因。

但是存在一个必须注意的特殊用例:

出于技术原因,当您通过引用返回时,当前语言通常会更快。 如果要求速度,您还应该考虑这个约束来做出最好的决定。

但基本的决定是关于你想如何处理对象的状态。

答案 2 :(得分:1)

返回某些内容是一种简单的选择,但是如果某些内容与之相反,您将使用该引用。一个原因是因为您对返回值有其他想法,例如成功/失败代码。另一个原因是因为它在堆栈上看起来很大而且你只是在一台小型计算机上。然后,当然,您可能希望修改现有变量或结构,而不是创建新变量或结构。我想是的。

通过传递引用或指针来接收结果,我不知道你能做些什么。

答案 3 :(得分:0)

没有人提到速度,所以我只添加这个小提示:

通过引用或指针传递通常比按值传递更快(只要指针的大小小于<值的大小)

如果引用sizeof(object) > sizeof(void *),换句话说,如果要返回的对象的大小大于任何指针的大小,则按引用返回/传递比按值返回更快(与指针返回相同)。在系统上(给定系统上的所有指针都具有相同的大小),在大多数系统上为8字节。

因此,如果要返回任何整数,浮点或双精度类型,则按值返回与按指针返回一样快或更快。但是,如果要返回9字节,10字节或1200字节的对象,则按引用或指针返回的速度更快,而对于1200字节对象的情况则要快得多。