想要速度?按值傳遞:效能注意事項
「想要速度?按值傳遞」的原則表明,按值傳遞參數有時可以由於複製省略而提高效能。為了說明這一點,請考慮以下使用類別 X 和 Y 的程式碼:
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());
}
這裡,foo() 傳回一個臨時字串,該字串被傳遞給 X 和 Y 建構子。當 X 初始化 mem_name 時,它會呼叫 std::string 的移動建構函數,這可能會避免複製字串。但是,當 Y 初始化 mem_name 時,它必須複製字串引用。
左值與右值參數:
如果傳遞左值(非暫時),則 X Y 將執行複製。此外,X 將執行一個動作。對於右值(臨時值),X 只能執行移動,而 Y 仍必須執行複製。
效能影響:
一般來說,移動比傳遞更快指標(相當於透過引用傳遞)。因此,X 對於左值具有與 Y 類似的性能,對於右值具有更好的性能。
注意:
雖然「想要速度?按值傳遞」是一個引人注目的想法,應當謹慎地應用它。必須考慮與複製大型資料結構相關的特定上下文和潛在開銷。建議進行分析以確定實際的效能影響。
其他資源:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3