21

これは、C# のバックグラウンドから来た私を本当に悩ませています。

ときどき、次のように記述された関数を見かけます。

int computeResult();

これは私が慣れているものです。しかし、私はそれらが次のように書かれているのを見ます:

void computeResult(int &result);

これは奇妙だと思います。2 番目の方法には、最初の方法よりもどのような利点がありますか? いつも見てるから何かあるに違いない。

4

1 に答える 1

20

このような非定数参照パラメーターには、次の2つの一般的な理由があります。

  • 関数内に複数の「out」パラメーターが必要な場合があり、参照パラメーターを使用するとこれが可能になります。

  • オブジェクトのコピーにはコストがかかる可能性があるため、戻りプロセスの一部としてコピーされる可能性のあるオブジェクトを返すのではなく、変更される参照を渡します。コピーに費用がかかるオブジェクトには、標準のコンテナ(などvector)や、割り当て-コピー-割り当て解除のシーケンスが発生するヒープメモリを管理するオブジェクトが含まれる場合があります。コンパイラーは、可能な場合はこれらのコピーを最適化するのに非常に優れているため、この理由により、以前よりもインポートが少なくなっていることに注意してください。

編集:C ++でも、単一の組み込み型参照パラメーターを使用して提供した特定の例は、かなり異例であることを明確にする必要があります。このような場合、ほとんどの場合、戻り値が優先されます。

于 2012-08-23T01:15:59.957 に答える