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