首頁 > 後端開發 > C++ > C 11:RVO 或明確「std::move」回傳值?

C 11:RVO 或明確「std::move」回傳值?

Mary-Kate Olsen
發布: 2024-12-24 08:57:14
原創
182 人瀏覽過

C  11: RVO or Explicit `std::move` for Return Values?

c 11 回傳值最佳化還是移動?

在處理具有 move 語意的物件時,程式設計師可能會想知道是否明確使用 std: :移動或依賴編譯器執行回傳值最佳化(RVO)。在這種情況下:

using SerialBuffer = vector< unsigned char >;

// let compiler optimize it
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    // Return Value Optimization
    return buffer;
}

// explicit move
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    return move( buffer );
}
登入後複製

哪一種方法比較好?

答案很明確:總是用第一種方法。編譯器已經能夠最佳化返回,並且明確使用 std::move 實際上會幹擾此最佳化。

複製省略允許在傳回對本地定義變數的右值參考時使用移動建構子。透過明確移動結果,您可以阻止編譯器為您執行此最佳化。

因此,為了獲得最佳效能,請僅使用第一種方法而不進行明確移動。讓編譯器處理最佳化,因為它保證產生盡可能最有效的程式碼。

以上是C 11:RVO 或明確「std::move」回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板