在什么情况下,返回一个对象比修改一个通过引用传递给函数的对象更好?我怎么知道我应该选择哪一个?实际上,问题是如果没有从函数返回对象的能力,我就不能做一些事情,而只能修改通过引用传递的对象。
2ul0zpep1#
两者的主要语用差异
TYPE function () ;
以及
void function (TYPE &value) ;
前者可以用在表达式中。
a = 10 * function () ;
if(函数()){ }这是主要的设计考虑。除此之外,我还必须发表意见。我将坚持客观的差异。
fykwrbwg2#
很简单...按“值”返回:- 如果您想要具有对象当前状态的对象副本;- 如果原始对象的状态后来发生变化,则这一点尤为重要;参照返回:- 如果您希望在对象被其他人更新时具有正确的状态;- 如果你想改变对象的状态,而别人觉察到这种变化;这些是最重要的原因。但存在一个您必须注意的特殊用例:由于技术上的原因,当前的语言通常在通过引用返回时速度更快。如果速度是一个要求,你也应该考虑这个限制以做出最佳决定。但基本的决定是关于你想如何处理对象的状态。
6fe3ivhb3#
返回某个值是一个简单的选择,但是如果有反对的地方,你会使用引用。一个原因是你对返回值有其他的想法,比如成功/失败代码。另一个原因是它在堆栈上看起来很大,而你在一个很小的计算机上。然后,当然,你可能想修改一个现有的变量或结构,而不是创建一个新的。我想就是这样。我不知道通过传递一个引用或指针来接收结果有什么不能做的。
5q4ezhmt4#
没有人提到过速度,所以我只想补充一点:
如果sizeof(object) > sizeof(void *),或者换句话说,如果返回的对象的大小大于系统上的任何指针的大小(给定系统上的所有指针都具有相同的大小),则通过引用返回/传递比通过值返回更快(与通过指针返回相同),在大多数系统上为8字节。因此,如果你返回任何整型、浮点型或双精度型,那么通过值返回比通过指针返回要快得多,如果你返回的是一个9字节、10字节或1200字节的对象,那么通过引用或指针返回要快得多,而且对于1200字节的对象来说要快得多。
sizeof(object) > sizeof(void *)
4条答案
按热度按时间2ul0zpep1#
两者的主要语用差异
以及
前者可以用在表达式中。
if(函数()){ }
这是主要的设计考虑。
除此之外,我还必须发表意见。我将坚持客观的差异。
fykwrbwg2#
很简单...
按“值”返回:- 如果您想要具有对象当前状态的对象副本;- 如果原始对象的状态后来发生变化,则这一点尤为重要;
参照返回:- 如果您希望在对象被其他人更新时具有正确的状态;- 如果你想改变对象的状态,而别人觉察到这种变化;
这些是最重要的原因。
但存在一个您必须注意的特殊用例:
由于技术上的原因,当前的语言通常在通过引用返回时速度更快。如果速度是一个要求,你也应该考虑这个限制以做出最佳决定。
但基本的决定是关于你想如何处理对象的状态。
6fe3ivhb3#
返回某个值是一个简单的选择,但是如果有反对的地方,你会使用引用。一个原因是你对返回值有其他的想法,比如成功/失败代码。另一个原因是它在堆栈上看起来很大,而你在一个很小的计算机上。然后,当然,你可能想修改一个现有的变量或结构,而不是创建一个新的。我想就是这样。
我不知道通过传递一个引用或指针来接收结果有什么不能做的。
5q4ezhmt4#
没有人提到过速度,所以我只想补充一点:
通过引用或指针传递通常比通过值传递快(只要指针的大小小于值的大小)
如果
sizeof(object) > sizeof(void *)
,或者换句话说,如果返回的对象的大小大于系统上的任何指针的大小(给定系统上的所有指针都具有相同的大小),则通过引用返回/传递比通过值返回更快(与通过指针返回相同),在大多数系统上为8字节。因此,如果你返回任何整型、浮点型或双精度型,那么通过值返回比通过指针返回要快得多,如果你返回的是一个9字节、10字节或1200字节的对象,那么通过引用或指针返回要快得多,而且对于1200字节的对象来说要快得多。