考虑以下两个相同功能的实现
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。
在对象构造方面,哪一个更有效?