透過右值引用回傳:是否更有效率?
透過右值引用返回物件可能並不總是比透過左值返回更有效率參考。如果傳回的物件是函數傳回後被破壞的臨時對象,則可能導致懸空參考。
原始程式碼:
提供的程式碼片段嘗試返回移動到臨時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中文網其他相關文章!