想要速度嗎?按值傳遞:效能注意事項
「想要速度?按值傳遞」的原則表明,按值傳遞參數有時可以由於複製省略而提高效能。為了說明這一點,請考慮以下使用類別 X 和 Y 的程式碼:
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} }; int main() { X(foo()); Y(foo()); }</code>
這裡,foo() 傳回一個傳遞給 X 和 Y 建構函數的臨時字串。當 X 初始化 mem_name 時,它會呼叫 std::string 的移動建構函數,這可能會避免複製字串。但是,當 Y 初始化 mem_name 時,它必須複製字串引用。
左值與右值參數:
如果傳遞左值(非暫時),則 X Y 會執行複製。此外,X 將執行一個動作。對於右值(臨時值),X 只能執行移動,而 Y 仍必須執行複製。
效能影響:
通常,移動比傳遞更快指針(相當於透過引用傳遞)。因此,X 的左值效能與 Y 相似,而右值效能較好。
注意:
雖然「想要速度?按值傳遞」是一個引人注目的想法,應當謹慎地應用它。必須考慮與複製大型資料結構相關的特定上下文和潛在開銷。建議進行分析以確定實際的效能影響。
其他資源:
以上是想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!