短時間に何百万回も呼び出される関数やメソッドにパラメーターを渡すと、そのパラメーターを渡すオーバーヘッドが現れ始めます。
void foo(const SomeType&st){...}
std :: string、std :: vectorなどのタイプの場合、無意味なコピーが発生しないように、参照を渡すのがルールです。ただし、double、intなどのPODを扱う場合、話はまったく異なります。
パフォーマンスに関して、関数/メソッドがパラメーターを変更する必要がない場合、参照、const参照、またはコピーのいずれを渡すかを決定するときに、「注意すべき点」は何ですか?
void foo1(SomeType& st)
{
...
}
void foo2(const SomeType& st)
{
...
}
void foo3(SomeType st)
{
...
}
void foo4(SomeType* st)
{
...
}
- int / unsigned intは常にコピーで渡されるべきですか?
- ダブルは64ビット以上のターゲットでのみコピーで渡されるべきですか?
- 関数をインライン化できる場合、パラメーターはどのように渡されますか?
- ref / const refで渡す場合、エイリアシングは問題にどのように影響しますか?
- どのような状況で、パラメーターの明示的なコピーがスタック上で有益でしょうか?
注:これは、const-correctnessに関する質問ではありません。また、32/64ビットプラットフォームでのgccおよびmsvcに関連する回答を探しています。
関連する可能性のあるいくつかのQ/A: