0

同じ関数の次の 2 つの実装を検討してください。

Object foo()
{
    Object ret;
    ret.a.set(...);
    ret.b.set(...);
    return ret;
}

Object foo()
{
    A a;
    a.set(...);

    B b;
    b.set(...);

    return Object(a, b);
}

構築後に A::set と B::set を呼び出す必要があるとします。さらに、Object、A、および B のすべてに、大量のデータをコピーしないムーブ コンストラクターがあるとします。最後に、コンパイラが RVO と NRVO の両方を実行するとします。

オブジェクトの構築に関して、これらのうちどれがより効率的ですか?

4

2 に答える 2

0

この実装で3つのサブオブジェクト(A、B、C)を使用する場合、新しく作成されたオブジェクトへのメンバー値の呼び出しが少なくなるため、後者の方が効率的であるように見えます。しかし、それが実際に違いを生むとは思いません。私はあなたが最も読みやすいと感じる方を選びます。

于 2012-08-12T18:44:14.580 に答える
0

コンテキストをあまり与えなかったので、メンバー a と b はベクトルのようであり、set 関数はこのベクトルのようなオブジェクトを要素で「埋める」と仮定します...そして Object の2パラメータコンストラクタcopy は、パラメーターからメンバー a および b を構築します...そして、コンパイラーが RVO だけでなく NRVO を実行できると仮定します (これは今ではかなり一般的です) ... 最初の関数はより効率的です。そのように a と b をコピーする必要があります。

于 2012-08-12T20:37:05.020 に答える