当前正在学习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;
}

代码二:
Vector3f Vector3f::add(const Vector3f &rhs) const {
    return Vector3f(
                x() + rhs.x(),
                y() + rhs.y(),
                z() + rhs.z());
}

我知道第二个代码段效率更高,我希望有人可以给我一个关于为什么的明确答案。我确定这与临时对象有关。

最佳答案

它可能与返回值优化(RVO)有关。由于第二种形式在返回对象时就构造了该对象,因此允许编译器通过(通常将)直接在调用者的上下文中构造该对象来跳过复制构造函数。

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

关于c++ - 哪个更快/更有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6030339/

10-11 22:50