0

我们正在课堂上使用 RVO 来展示我们如何减少创建的临时对象的数量。

我了解了它的基础知识,但我很难理解如何将多个值组合成一行。

对于单一的临时优化,我能够相当容易地理解它

const A operator + ( const A &tmp)
{
    A sum;
    sum = this->x + tmp.x;
    return sum;
}

可以简化为:

const A operator + ( const A &tmp)
{
    return A(this->x + tmp.x);
}

但是我不确定如何将它应用于具有多个要返回的值的函数。例如:

Vect2D operator - ( const Vect2D &tmp ) const;

Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
    Vect2D sum;

    sum.x = this->x - tmp.x;
    sum.y = this->y - tmp.y;

    return ( sum );
};

我背后的过程是:

Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
    return Vect2D((this->x - tmp.x), (this->y - tmp.y));
};

它返回一个错误告诉我“ no argument takes the value (float, float)”。

我需要重新组织最初的

Vect2D 运算符 - ( const Vect2D &tmp ) const;

取两个浮点参数?还是我以错误的方式思考这个问题?

谢谢,

E:感谢 Matt 和 Jerry 确认我认为我需要对双浮点运算符做些什么。

4

1 回答 1

0

我的问题的解决方案是不理解运算符需要 Friend 函数才能有两个参数。虽然不完全是 RVO,但该解决方案确实减少了通过返回包含两个变量而创建的临时数。

再次感谢马特和杰瑞让我开始这个过程。

于 2014-10-30T23:34:22.287 回答