按值傳遞與按右值引用傳遞
函數參數的選擇按值傳遞還是按右值引用傳遞取決於幾個因素。
以值傳遞
-
(Widget w)
- 創建以下內容的副本輸入參數,保持原始不變。
- 涉及隱式複製操作,這對於大型或複雜物件可能效率低下。
- 假定參數的所有權,即使它不修改它.
通過右值引用
-
(Widget&& w)
- 以右值(例如,過期的臨時物件)強制初始化參數,防止複製操作。
- 當呼叫者需要副本時,需要使用 std::move 明確聲明副本.
- 禁止在呼叫者的副本中反映回傳值的任何變更。
主要差異
- 複製所有權:
必須複製參數按右值引用傳遞允許函數移動參數,從而在某些情況下消除額外的移動建構函數呼叫。 -
介面語意:
右值引用表示該函數打算取得該值的所有權,且不對其持續存在負責。 -
效率:
透過右值傳遞在呼叫者不需要輸入物件副本的情況下,引用可以更有效。
選擇正確的方法
在以下情況下使用按值傳遞:
- 該函數需要輸入物件的副本或修改版本。
- 輸入物件很小或複製成本較低。
使用 pass在以下情況下透過右值參考:
- 函數需要取得擁有權並修改輸入物件。
- 輸入物件很大或複製成本很高。
- 呼叫者不需要輸入物件的副本。
以上是在 C 中何時選擇按值傳遞與按右值參考傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!