傳遞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中文網其他相關文章!