首页 > 后端开发 > C++ > 通过右值引用返回总是比通过左值引用返回更有效吗?

通过右值引用返回总是比通过左值引用返回更有效吗?

Barbara Streisand
发布: 2024-12-24 00:15:10
原创
167 人浏览过

Is Returning by Rvalue Reference Always More Efficient Than Returning by Lvalue Reference?

通过右值引用返回:是否更高效?

通过右值引用返回对象可能并不总是比通过左值返回更高效参考。如果返回的对象是函数返回后被破坏的临时对象,则可能导致悬空引用。

原始代码:

提供的代码片段尝试返回移动到临时 Beta_ab 对象的右值引用:

Beta_ab&& Beta::toAB() const {
    return move(Beta_ab(1, 1));
}
登录后复制

不建议这样做,因为它返回悬空 参考。为了正确地将临时值移动到返回值中,函数应该返回一个值而不是右值引用:

Beta_ab Beta::toAB() const {
    return Beta_ab(1, 1);
}
登录后复制

在其他函数中使用右值引用:

在某些情况下,返回右值引用可能是有益的。例如,如果有一个在临时对象上频繁调用的 getAB() 函数,则返回右值引用可能会更有效:

struct Beta {
  Beta_ab ab;
  Beta_ab const& getAB() const& { return ab; }
  Beta_ab &&getAB() && { return move(ab); }
};
登录后复制

在此示例中,move 是必要的,因为 ab 不是本地自动或临时右值。引用限定符 && 确保在右值临时值上调用第二个 getAB() 函数,从而导致移动而不是复制。

结论:

返回时通过右值引用在某些情况下可能会很有效,但应谨慎使用以避免悬空引用。对于返回临时对象的函数来说,返回值通常是首选。

以上是通过右值引用返回总是比通过左值引用返回更有效吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板