簡體   English   中英

有沒有一種有效的方法可以通過自我分配的價值回報?

[英]Is there an efficient way to return by value for self assignment?

對於 output 參數,通常的 cpp 建議是:“避免通過可修改的引用傳遞 output 參數,而是通過值返回”。 現在,如果我們想修改 object 本身,例如

string s = "whatever";
//maybe in a loop
s = modify(s);

然后它看起來像 function string modify (string)總是優於 function like modifyInPlace(string &) 有什么辦法可以解決這個問題嗎? 有沒有什么根本原因導致這個問題永遠無法解決? 我覺得 take by value, return by value 的語義更安全更清晰。

示例比較測量: http://quick-bench.com/-XZqOZw-X739tlcOI8vau8DU24w

有什么辦法可以解決這個問題嗎?

你必須做出選擇。 任何一個

  • 創建一個修改后的副本,這對某些類型來說可能很昂貴,或者
  • 就地修改,這不符合您描述的偏好,但對於某些類型可能更快。

您需要考慮哪個對您的程序更重要。

也就是說,如果您通過移動創建修改副本的開銷通常並不顯着:

s = modify(std::move(s));

這是基准測試的修改版本: http://quick-bench.com/X_ONMO_yiAqbkkcbvsiC_Xpk5Sw


當您創建不基於相同類型的現有值的新值時,“無參考 output 參數”經驗法則很有效。 在這種情況下,通常沒有可用的就地替代方案。

通過引用修改幾乎總是比通過值修改更快,除非您的值非常小(例如int )。 這是因為,當您按值修改時,您必須創建 memory 中的值的副本以傳遞給 function,而引用不必這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM