首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是"return obj(value);return?

什么是"return obj(value);return?
EN

Stack Overflow用户
提问于 2011-03-07 04:21:09
回答 2查看 201关注 0票数 2

return obj(value);返回什么?返回新构造的对象还是它的副本?

我这么问的原因是:

代码语言:javascript
复制
return obj(value);

更高效,比

代码语言:javascript
复制
temp = obj(value); 
return temp;

后续:如果是这样,这真的有区别吗,或者编译器会优化这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-07 04:27:21

Return语句总是返回参数对象的副本,但有一个例外:当函数返回一个引用时,该引用可能会直接附加到return的参数上,在这种情况下,当然不会进行任何复制。

出于这个原因,从您的案例中的学究观点来看,没有办法说会发生什么,因为我们不知道使用您的return的函数的签名。它是否返回引用?

如果我们假设函数返回一个非引用类型(这可能是您所暗示的),那么在这两种情况下都会返回一个副本。在第二种情况下,您自己也在temp对象中创建了一个额外的副本。因此,从抽象的角度来看,第二个变体制作了一个额外的副本,因此是“较慢的”。但是,在这种情况下,C++语言允许进行影响相当深远的优化。阅读有关RVO (返回值优化)和NRVO (命名为返回值优化)的信息。由于这些优化,这两个变体实际上可能会产生相同的代码,显然,将是同样有效的。

最后,它归结为您的特定编译器将能够生成的代码。如果你想知道哪一个更快,可以用你的特定编译器和你的特定编译器设置。或者检查生成的机器码。

票数 2
EN

Stack Overflow用户

发布于 2011-03-07 04:24:38

这并不是更有效率。它返回一个新创建值作为副本。但在这两种情况下,编译器都有可能优化返回值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5213119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档