C++ 收益值优化
考虑相同函数的以下两种实现C++ 收益值优化,c++,performance,return-value,copy-constructor,C++,Performance,Return Value,Copy Constructor,考虑相同函数的以下两种实现 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。此外,假设对象A和B都有不复制大量数据的移动构造函数
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。此外,假设对象A和B都有不复制大量数据的移动构造函数。最后,假设编译器同时执行RVO和NRVO
在对象构造方面,哪一个更有效?如果此实现使用3个子对象(A、B、C),则后者似乎更有效,因为对新创建的对象的成员值调用更少。不过,我不认为这真的有什么不同。我会选择你认为可读性最好的一个。假设——因为你没有给出太多的上下文——成员a和b是向量状的,集合函数用元素“填充”这个向量状的对象。。。假设对象副本的双参数构造函数根据参数构造成员a和b。。。假设您的编译器能够执行NRVO,而不仅仅是RVO(目前非常常见)。。。第一个函数应该更有效,因为您不必以这种方式复制a和b。取决于
对象
、编译器优化等。只需分析它为什么构造函数不采用完全构造对象所需的参数。只要这不是瓶颈(你应该能够证明这一点)。那么代码应该以一种最容易编写和维护的方式来编写。从理论上讲,我最好奇的是它的效率。