考虑以下两个相同功能的实现
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。
对于构造对象,哪一个更有效?
答案 0 :(得分:0)
如果此实现使用3个子对象(A,B,C),那么后者看起来会更有效,因为对新创建的Object的成员值调用会更少。不过,我不认为这确实有所作为。我会选择你认为最具可读性的那个。
答案 1 :(得分:0)
假设 - 因为你没有提供太多的上下文 - 成员a和b是类似矢量的,并且set函数“填充”这个类似矢量的对象元素......并假设这两个参数对象复制的构造函数从参数构造成员a和b ...并假设您的编译器能够执行NRVO而不仅仅是RVO(现在很常见)...第一个函数应该更高效,因为你不必那样复制a和b。