通过右值引用返回:是否更高效?
通过右值引用返回对象可能并不总是比通过左值返回更高效参考。如果返回的对象是函数返回后被破坏的临时对象,则可能导致悬空引用。
原始代码:
提供的代码片段尝试返回移动到临时 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中文网其他相关文章!