同じ関数の次の 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 の両方を実行するとします。
オブジェクトの構築に関して、これらのうちどれがより効率的ですか?