哪个更快/更有效?

Cam*_*lby 2 c++ performance

目前正在学习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)

我知道第二个代码段更有效率,我希望有人可以给我一个确切的答案.我确定它与临时物体有关.

Mar*_*tos 5

它可能与返回值优化(RVO)有关.因为第二种形式在返回对象时构造对象,所以允许编译器(通常会)通过直接在调用者的上下文中构造对象来跳过复制构造函数.

第一种形式也可以以类似的方式进行优化,但我经常看到编译器优化后者而不是前者.