目前正在学习C++的效率,并想知道在方法中返回参数的效率.
想象一下带有add方法的Vector3f类.
代码一:
Vector3f Vector3f::add(const Vector3f &rhs) const {
Vector3f result;
result.x(x() + rhs.x());
result.y(y() + rhs.y());
result.z(z() + rhs.z());
return result;
}
Run Code Online (Sandbox Code Playgroud)
代码二:
Vector3f Vector3f::add(const Vector3f &rhs) const {
return Vector3f(
x() + rhs.x(),
y() + rhs.y(),
z() + rhs.z());
}
Run Code Online (Sandbox Code Playgroud)
我知道第二个代码段更有效率,我希望有人可以给我一个确切的答案.我确定它与临时物体有关.
它可能与返回值优化(RVO)有关.因为第二种形式在返回对象时构造对象,所以允许编译器(通常会)通过直接在调用者的上下文中构造对象来跳过复制构造函数.
第一种形式也可以以类似的方式进行优化,但我经常看到编译器优化后者而不是前者.