按值傳遞與按右值引用傳遞
何時聲明:
在某些情況下其中函數需要傳遞參數的所有權,將函數宣告為:
- void foo(Widget w);按值傳遞,需要隱式複製所傳遞的參數。
- void foo(Widget&& w);透過右邊值參考傳遞,允許明確移動所傳遞的參數。
主要差異:
1。複製控制:
- 以值傳遞:發生隱式複製,可能會引入額外成本。
- 以右值引用傳遞:複製構造需要明確移動,強制呼叫者管理副本。
2.介面語意學:
- 值參數:此函數表示它想要對參數的副本進行操作。
- 右值參考參數:此函數打算取得參數並且可以進行修改。
3.效率:
- 以值傳遞:可以消除單一移動建構函式呼叫。
- 以右邊值引用傳遞:編譯器最佳化可以消除呼叫方的複製或移動。
- 但是,當傳遞的參數沒有大型或昂貴的成員時,效率提升可能可以忽略不計。
介面意義:
Rvalue引用參數傳達以下意圖:
- 函數宣告傳遞值的擁有權。
- 函數可以修改傳遞的值而不影響呼叫者的參考。
- 呼叫者放棄對傳遞值的所有所有權和責任。
相反,值參數指示:
- 函數對傳遞值的副本進行操作。
- 呼叫者保留所傳遞值的所有權,並且函數所做的任何更改都不會影響它。
以上是什麼時候應該使用按值傳遞與按右值引用傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!