マッピング(数学的意味で)を表現するいくつかのクラス、つまりf:RxR^n - > R^nを実装しています。 1)参照としてstd :: arrayをとり、それを変更します または 2)std :: arrayを返します(値または参照によって、わかりません)std :: arrayを返す
オプション2の構文は、コードが私が表現しようとしている数学のように見えると思うので、私にとってはもっと望ましいですが、私は不必要に物をコピーして望ましくないオーバーヘッド。例えば、私が持っていた場合:
// Function f declaration
std::array<double, 4> f(double t, const std::array<double, 4> & x);
// Some code snippet that uses f
std::array<double, 4> x = {0.0, 1.0, 2.0, 3.0};
double t = 0.0;
std::array<double, 4> dxdt = f(t, x);
を私はコピーが最後の行に実行されている、またはどのように私はそれががが起こらないことを保証できるかどうかを判断するにはどうすればよいですか?
f()の定義内で、コピーコンストラクタを呼び出さずに返されるようにするには何が必要ですか?クライアントがポインタやスマートポインタを使う必要がないように、使い方を単純にしたいのですが、これは必要でしょうか?
voidを返すようにこれを変更して、引数の1つをstd :: array dxdtにすることができますが、パフォーマンスの低下やメモリリークの問題がない限り、戻り値の構文がより好きです。
ありがとう!私は、関数呼び出しが最後のパラメータを "出力"パラメータであることに固執するつもりです。なぜなら、関数呼び出しは、保持している変数を宣言している場所と同じ行には存在しないからです戻り値は、このように、私はコピーが作成されていないことを確かに知っています。 – hazelnusse
@ hazelnusse:もしあなたがそれを行うことができれば、戻り値を "出力パラメータ"にしておけば、すべての返信文が同じ変数を明示的に*返すことができます。したがって、名前付き戻り値の最適化が始まります。だから問題は何ですか? –
@hazelnusse: "...同じ行にはありません..." "行"については決して話しませんでした。 –