重複の可能性:
値渡しよりも参照渡しの方が費用がかかる
パラメータを値またはC++の参照で送信して、どちらが優れているかを知りたいです。参照による送信よりも値による送信の方が速い場合があると聞きました。これらのケースはどれですか?
ありがとう
重複の可能性:
値渡しよりも参照渡しの方が費用がかかる
パラメータを値またはC++の参照で送信して、どちらが優れているかを知りたいです。参照による送信よりも値による送信の方が速い場合があると聞きました。これらのケースはどれですか?
ありがとう
明らかなケースは、パラメーターのサイズがポインター以下であり、コピーするのが簡単な場合です。その場合、値を渡すことになります。ただし、これは古くからの議論であり、特定のアーキテクチャで正しく答えるにはかなり長い答えが必要です。多くのコーナーケースもあります(例:RVO)。
問題には速度以上のものがあります。セマンティクスを最優先する必要があります。
原則として、PODタイプは値で渡し、複合タイプはconst参照で渡す必要があります。
とはいえ、複合型を値で渡すのに適した場所は、とにかく関数内のオブジェクトのコピーが必要になる場所です。その場合、2つの選択肢があります。
引数をconst参照として渡し、関数内にローカルコピーを作成します
引数を値で渡します(コンパイラーがローカルコピーを作成します)。
2番目のオプションは一般的に効率的です。例については、copy&swapイディオムを参照してください。