首頁 >後端開發 >C++ >想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?

想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?

Linda Hamilton
Linda Hamilton原創
2024-10-26 11:59:031050瀏覽

 Want Speed? Pass By Value: Is Copy Elision Always the Performance Winner?

想要速度嗎?按值傳遞:效能注意事項

「想要速度?按值傳遞」的原則表明,按值傳遞參數有時可以由於複製省略而提高效能。為了說明這一點,請考慮以下使用類別 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 相似,而右值效能較好。

注意:

雖然「想要速度?按值傳遞」是一個引人注目的想法,應當謹慎地應用它。必須考慮與複製大型資料結構相關的特定上下文和潛在開銷。建議進行分析以確定實際的效能影響。

其他資源:

  • [Scott Meyer 的GN13 演講](https://www.youtube.com /watch?v=uk3-zmJWt- E)(時間範圍8:10 和8:56)
  • [juanchopanza 的部落格:「想要速度?不要(總是)傳遞價值」]

以上是想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn