これは、C# のバックグラウンドから来た私を本当に悩ませています。
ときどき、次のように記述された関数を見かけます。
int computeResult();
これは私が慣れているものです。しかし、私はそれらが次のように書かれているのを見ます:
void computeResult(int &result);
これは奇妙だと思います。2 番目の方法には、最初の方法よりもどのような利点がありますか? いつも見てるから何かあるに違いない。
これは、C# のバックグラウンドから来た私を本当に悩ませています。
ときどき、次のように記述された関数を見かけます。
int computeResult();
これは私が慣れているものです。しかし、私はそれらが次のように書かれているのを見ます:
void computeResult(int &result);
これは奇妙だと思います。2 番目の方法には、最初の方法よりもどのような利点がありますか? いつも見てるから何かあるに違いない。
このような非定数参照パラメーターには、次の2つの一般的な理由があります。
関数内に複数の「out」パラメーターが必要な場合があり、参照パラメーターを使用するとこれが可能になります。
オブジェクトのコピーにはコストがかかる可能性があるため、戻りプロセスの一部としてコピーされる可能性のあるオブジェクトを返すのではなく、変更される参照を渡します。コピーに費用がかかるオブジェクトには、標準のコンテナ(などvector
)や、割り当て-コピー-割り当て解除のシーケンスが発生するヒープメモリを管理するオブジェクトが含まれる場合があります。コンパイラーは、可能な場合はこれらのコピーを最適化するのに非常に優れているため、この理由により、以前よりもインポートが少なくなっていることに注意してください。
編集:C ++でも、単一の組み込み型参照パラメーターを使用して提供した特定の例は、かなり異例であることを明確にする必要があります。このような場合、ほとんどの場合、戻り値が優先されます。