首頁 >後端開發 >C++ >透過右值引用返回總是比透過左值引用返回更有效嗎?

透過右值引用返回總是比透過左值引用返回更有效嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-24 00:15:10135瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn