gpt4 book ai didi

c++ - “return obj(value); 返回什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:04 25 4
gpt4 key购买 nike

return obj(value);返回什么?将新构造的对象或它的拷贝返回给它?

我问的原因:是

return obj(value);

更有效率
temp = obj(value); 
return temp;

?

跟进:如果是这样,真的有区别吗,还是编译器会优化它?

最佳答案

Return 语句总是返回参数对象的拷贝,但有一个异常(exception):当函数返回一个引用时,该引用可能附加到 的参数直接返回,在这种情况下当然不会复制。

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

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

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

关于c++ - “return obj(value); 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com