[英]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 的語義更安全更清晰。
有什么辦法可以解決這個問題嗎?
你必須做出選擇。 任何一個
您需要考慮哪個對您的程序更重要。
也就是說,如果您通過移動創建修改副本的開銷通常並不顯着:
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.