重複の可能性:
C++ では、値渡しと定数参照渡しのどちらが優れていますか?
C++でいつ参照渡しし、いつポインター渡しますか?
私はcとc ++にかなり慣れていません。関数にパラメーターを渡すことに関して次の質問があり、ここで質問して、教祖からの知識の源に直接アクセスするのが最善だと思いました.
パラメータをいつ値渡しする必要があり、いつ参照渡しする必要がありますか? そして、現実の世界で最も一般的に使用されている方法は何ですか?
前もって感謝します。
重複の可能性:
C++ では、値渡しと定数参照渡しのどちらが優れていますか?
C++でいつ参照渡しし、いつポインター渡しますか?
私はcとc ++にかなり慣れていません。関数にパラメーターを渡すことに関して次の質問があり、ここで質問して、教祖からの知識の源に直接アクセスするのが最善だと思いました.
パラメータをいつ値渡しする必要があり、いつ参照渡しする必要がありますか? そして、現実の世界で最も一般的に使用されている方法は何ですか?
前もって感謝します。
参照渡しを優先します。通常は次の 1 つ以上です。
const
このリストの残りの部分に応じて、とにかくかなり頻繁に実行します)値渡し:
パラメータがレジスタよりも大きく、変更していない場合は、const 参照として渡す必要があります。もちろん、後でコピーなどを作成するという例外的なケースもありますが、一般的にはこのルールが当てはまります。
小さい型の場合は、問題ではありません (つまり、const int& または int) は同じ結果を返す必要があります。安全のために、とにかく値で渡します。汎用コードの場合は、Boost Call Traitsライブラリを使用できます。このライブラリは、参照渡しと値渡しのどちらを使用するかを自動的に決定します。
オブジェクトを変更したい場合は、それを参照として渡すと、その場で変更できます。これは通常、新しいオブジェクトを返して元のオブジェクトを上書きするよりも高速です。
とりわけ、主にニーズに依存します。渡された変数に加えられた変更が現在の関数に反映されていることを確認したい場合は、確かに参照渡しを使用しますが、渡された変数に変更を加えることが厳密な場合変数が現在の関数に反映されていない場合は、「値渡し」を選択してください。
ありがとう、マウィア
一般に、引数を変更する必要があり、呼び出し元にコピーを作成させたくない場合は、値渡しを使用する必要があります。const への参照渡しを使用する必要があります。
ただし、これは実際には「言語のフェデレーションとしての C++」ビットに帰着します。たとえば、STL アルゴリズムを作成している場合は、値渡しを使用する必要があります。これは、反復子とファンクターがポインターと関数ポインターを近似するためです。
渡さない理由がない限り、値で渡します。しない理由:
上記の #2 では、オブジェクトが大きい場合でも値渡しが必要な場合があることに注意してください。値による受け渡しはより単純であるため、保守が容易です。また、値による受け渡しがコード内で実際の問題を引き起こしていると信じる理由がない限り、const 参照による受け渡しは時期尚早のマイクロ最適化である可能性があります。たとえば、関数が 64 バイト (または 64k バイト) のパラメーターを受け取るが、その関数が 1 日に 1 回しか呼び出されない場合、const 参照で渡す理由はまったくありません。それはあなたを実質的に何も節約しません。最初にリリース モードでコードをプロファイリングしてから、最適化します。
デフォルトでは、次を除いて const 参照で渡します。
1) in/out または out パラメータが必要な場合 - 関数によって変更されるもの。その場合は、非 const 参照を使用してください。2) 整数、浮動小数点、またはポインターを渡す場合 - 値渡し。