首頁 > 後端開發 > C++ > 我們也應該透過 `const std::string&` 引用傳遞 `std::string` 嗎?

我們也應該透過 `const std::string&` 引用傳遞 `std::string` 嗎?

DDD
發布: 2024-12-10 00:27:16
原創
323 人瀏覽過

Should We Still Pass `std::string` by `const std::string&` Reference?

傳遞const std::string& 參考文獻的過時:Herb Sutter 的觀點

在最近的一次演講中,Herbutter Sutter 表達了透過const& 傳遞std::vector 和std::string。他建議傳統方法:

std::string do_something(const std::string& inval)
登入後複製

與以​​下相比現在不太理想:

std::string do_something(std::string inval)
登入後複製

雖然人們承認inval 保留了其大小,但Herb 的論點源於涉及函數鏈的場景。考慮A 呼叫B,B 又呼叫C 的範例:

情況1:透過const 引用傳遞

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
登入後複製

當C 需要儲存時,進行複製操作變得必要:

void C(const std::string& str) { m_str = str; }
登入後複製

但是,使用const& 會阻止 C存取移入其的底層資料

情況2:按值傳遞

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
登入後複製

在這種情況下,字串透過函數呼叫移動,避免不必要的複製。透過短字串最佳化 (SSO) 避免小字串記憶體分配的好處抵消了移入值的效能開銷。

最終,透過 const 引用或值傳遞之間的選擇取決於特定用途案例以及開發人員對記憶體分配效率與潛在效能缺陷的偏好。

以上是我們也應該透過 `const std::string&` 引用傳遞 `std::string` 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板