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

bqjvbblv  于 2023-01-06  发布在  其他
关注(0)|答案(4)|浏览(131)

在什么情况下,返回一个对象比修改一个通过引用传递给函数的对象更好?我怎么知道我应该选择哪一个?
实际上,问题是如果没有从函数返回对象的能力,我就不能做一些事情,而只能修改通过引用传递的对象。

2ul0zpep

2ul0zpep1#

两者的主要语用差异

TYPE function () ;

以及

void function (TYPE &value) ;

前者可以用在表达式中。

a = 10 * function () ;

if(函数()){ }
这是主要的设计考虑。
除此之外,我还必须发表意见。我将坚持客观的差异。

fykwrbwg

fykwrbwg2#

很简单...
按“值”返回:- 如果您想要具有对象当前状态的对象副本;- 如果原始对象的状态后来发生变化,则这一点尤为重要;
参照返回:- 如果您希望在对象被其他人更新时具有正确的状态;- 如果你想改变对象的状态,而别人觉察到这种变化;
这些是最重要的原因。
但存在一个您必须注意的特殊用例:
由于技术上的原因,当前的语言通常在通过引用返回时速度更快。如果速度是一个要求,你也应该考虑这个限制以做出最佳决定。
但基本的决定是关于你想如何处理对象的状态。

6fe3ivhb

6fe3ivhb3#

返回某个值是一个简单的选择,但是如果有反对的地方,你会使用引用。一个原因是你对返回值有其他的想法,比如成功/失败代码。另一个原因是它在堆栈上看起来很大,而你在一个很小的计算机上。然后,当然,你可能想修改一个现有的变量或结构,而不是创建一个新的。我想就是这样。
我不知道通过传递一个引用或指针来接收结果有什么不能做的。

5q4ezhmt

5q4ezhmt4#

没有人提到过速度,所以我只想补充一点:

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

如果sizeof(object) > sizeof(void *),或者换句话说,如果返回的对象的大小大于系统上的任何指针的大小(给定系统上的所有指针都具有相同的大小),则通过引用返回/传递比通过值返回更快(与通过指针返回相同),在大多数系统上为8字节。
因此,如果你返回任何整型、浮点型或双精度型,那么通过值返回比通过指针返回要快得多,如果你返回的是一个9字节、10字节或1200字节的对象,那么通过引用或指针返回要快得多,而且对于1200字节的对象来说要快得多。

相关问题