在operator + =中使用operator +比不使用它更慢吗?

时间:2015-08-22 04:19:25

标签: c++ performance optimization operator-overloading

说我有一个像这样的矢量类:

struct Vector
{
    int x, y;

    Vector operator+(Vector rhs)
    {
        return Vector(x + rhs.x, y + rhs.y);
    }
}

我想添加operator+=。我有两个选择:

此:

Vector& operator+=(Vector rhs)
{
    *this = *this + rhs;
    return *this;
}

或者这个:

Vector& operator+=(Vector rhs)
{
    x += rhs.x;
    y += rhs.y;
    return *this;
}

使用各自的数学运算符和赋值运算符将其应用于所有其他operator_=,并使用operator!=operator==应用于 where DATEADD(YY,18,Birthday) >= getdate() ,由于额外的运算符调用,会有任何实际的性能下降,假设经常使用这些运算符?

1 个答案:

答案 0 :(得分:1)

都不是。一般来说,我会说用operator+(效率更高的操作)来编写operator+=(效率较低的操作)会更好。

Vector& Vector::operator+=(Vector rhs)
{
    x += rhs.x;
    y += rhs.y;
    return *this;
}

Vector operator+(Vector lhs, vector rhs)
{
    return lhs += rhs;
}

虽然你的Vector类足够小,但它可能不会产生巨大的差异,