具有多个返回的RVO运算符

RVO Operators With Multiple Returns

本文关键字:RVO 运算符 返回      更新时间:2023-10-16

我们在课堂上与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肯定了我认为我需要对双浮点运算符做的事情。

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

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